Kueri SQL yang kompleks sangat baik untuk membuat penelusuran basis data menjadi sangat spesifik dan fleksibel, tetapi kueri tersebut juga bisa sulit dipahami dan hampir tidak mungkin untuk di-debug—dan sebaiknya Anda lupa untuk menggunakannya kembali.
Saat kueri melampaui perintah SELECT dan WHERE standar Anda, Anda bahkan mungkin menemukan kinerja SQL Server mulai menurun karena pengoptimal kueri mengalami masalah saat memproses kueri yang panjang dan kompleks.
Jika Anda melihat bahwa kueri SQL Anda menggunakan terlalu banyak gabungan kompleks dan subkueri, kueri bersarang di klausa WHERE, dan mengandalkan banyak klausa AND dan OR, mungkin ini saat yang tepat untuk mundur dan mencari cara untuk meminimalkan beberapa kerumitan.
Tips untuk Meminimalkan Kompleksitas Kueri SQL Server
Seperti yang kami sebutkan di atas, pengoptimal kueri SQL Server tidak menyukai kueri SQL yang rumit. Berikut adalah lima cara untuk membuat kueri Anda tidak terlalu rumit sehingga dapat dioptimalkan untuk meningkatkan kinerja.
1. Hilangkan Klausa ATAU Jika Memungkinkan
Cara termudah untuk membuat kueri tidak terlalu rumit adalah dengan menghilangkan klausa OR bila memungkinkan. Karena OR bersifat inklusif, SQL Server harus memproses setiap komponen klausa secara terpisah, yang sangat memperlambat operasi.
Jika tidak mungkin untuk menghapus ATAU, opsi terbaik berikutnya adalah memecah kueri yang panjang dan kompleks menjadi kueri yang lebih kecil. Tampaknya agak berlawanan dengan intuisi bahwa memproses lebih banyak kueri lebih cepat daripada memproses satu kueri, tetapi jika menyangkut ATAU, Anda lebih baik menggunakan beberapa kueri.
2. Pencarian String Sempurna
SQL Server melakukan banyak hal dengan baik, tetapi pencarian string fuzzy bukanlah salah satunya. Pencarian string wildcard, terutama pada tabel besar, tidak efisien dan buruk untuk kinerja.
Ada beberapa penyesuaian yang dapat Anda terapkan pada penelusuran string yang membantu meminimalkan dampak pada kinerja.
- Gunakan pencarian string utama alih-alih pencarian wildcard (yaitu, ubah “%For%” menjadi “For%”)
- Terapkan filter seperti tanggal atau waktu ke kueri untuk mengurangi ukuran data sebelum menjalankan pencarian string
- Terapkan pengindeksan teks lengkap untuk menghasilkan indeks yang memungkinkan pencarian string fleksibel pada kolom teks
3. Waspadai Operasi Tulis Besar
Operasi penulisan yang besar menyebabkan pertengkaran dan menghasilkan banyak file log. Jika tidak dicentang, operasi tulis besar dapat memblokir sumber daya dari pengguna dan membuat masalah latensi serta mengisi log transaksi atau bahkan penyimpanan fisik.
Karena Anda tidak selalu dapat menghindari operasi tulis yang besar, perhatikan saat Anda menjalankannya (semakin sedikit sibuk server, semakin baik) atau kurangi jumlah baris yang dimodifikasi per operasi untuk meminimalkan risiko pertengkaran.
4. Bersihkan Indeks
Indeks adalah salah satu penyebab utama dalam hal kinerja yang buruk, tetapi ketika Anda mencoba untuk mengoptimalkan kueri SQL yang kompleks, indeks memerlukan beberapa pertimbangan khusus.
SQL Server memiliki beberapa alat yang memberi tahu Anda saat indeks yang hilang memengaruhi kinerja kueri. Tetapi sebelum Anda masuk dan mulai menambahkan indeks, Anda perlu menentukan apakah indeks tambahan akan cukup meningkatkan kueri sehingga sepadan dengan usaha. Misalnya, jika kueri berjalan 1 juta kali sehari dan indeks meningkatkannya sebesar 25 persen, maka itu mungkin sepadan. Jika kueri jarang digunakan, mungkin tidak masuk akal.
Beberapa hal lain yang perlu dipertimbangkan sebelum Anda mulai menambahkan indeks adalah apakah indeks yang ada dapat diubah untuk menutupi kasus penggunaan ini tanpa menambahkan yang baru dan apakah indeks ini sudah ada tetapi pengoptimal mengabaikannya karena alasan tertentu.
Cara lain indeks dapat memengaruhi kinerja kueri adalah tabel dan tabel pengindeksan berlebih atau kurang dan tabel yang tidak memiliki indeks berkerumun atau kunci utama. Menyelesaikan masalah ini akan membantu kinerja kueri SQL yang kompleks.
5. Pertahankan Hitung Mundur Tabel
Setiap kali Anda menambahkan tabel ke kueri, kueri menjadi lebih kompleks. Tabel yang berlebihan sering mengakibatkan rencana eksekusi yang buruk karena pengoptimal kueri tidak dapat bekerja secara efisien.
Jika Anda melihat kueri kompleks berkinerja buruk dan memiliki banyak tabel, ini mungkin salah satu saat ketika membagi kueri menjadi kueri yang lebih kecil adalah pilihan terbaik karena akan meringankan sebagian beban pengoptimal.
Alat Penyesuaian Kinerja Dapat Membantu Meminimalkan Kompleksitas SQL Server
Saat kueri kompleks menghambat pengoptimal kueri, Anda sering kali berakhir dengan rencana eksekusi yang tidak efisien, dan kinerja menurun. Selain tips di atas, alat penyetelan kinerja adalah sumber daya yang berharga untuk meminimalkan kompleksitas kueri SQL Server dan mengoptimalkan kinerja.
Berikut adalah beberapa kemampuan yang harus dicari saat meneliti solusi penyetelan kinerja.
Analisis Rencana Eksekusi SQL Server
Alat penyetelan harus menganalisis rencana eksekusi Anda dan menentukan apa yang perlu diubah agar SQL Server dapat menjalankan operasi dengan lebih efisien.
Visualisasi Rencana Eksekusi SQL Server
Alat penyetelan harus menyajikan rencana eksekusi dengan cara yang mudah dipahami dan membantu Anda menemukan operasi yang memperlambat eksekusi.
Optimasi SQL Otomatis
Alat penyetelan harus menganalisis SQL Anda, lalu menulis ulang secara otomatis hingga mencapai peningkatan waktu eksekusi maksimum.
Perbandingan Pernyataan SQL yang Dioptimalkan dan Asli
Alat penyetelan harus menyoroti perubahan dalam pernyataan SQL sehingga Anda dapat membandingkan versi asli dan yang dioptimalkan sebelum menerapkan perubahan.
Perbandingan Paket Eksekusi SQL Server
Alat penyetelan harus memberikan perbandingan rencana eksekusi asli dan yang dioptimalkan sehingga Anda tahu apa yang berubah di antara versi.
Bukti Statistik
Alat penyetelan Anda harus menyediakan data yang menunjukkan mengapa SQL yang dioptimalkan dieksekusi lebih cepat daripada pernyataan SQL asli.
Kueri SQL Server yang kompleks dapat berdampak negatif pada kinerja sistem. Gunakan tip berikut dan solusi penyetelan kinerja berkualitas tinggi untuk membersihkan kerumitan dan mengoptimalkan efisiensi kueri SQL Anda.