Kinerja basis data yang buruk adalah duri di setiap sisi DBA. Dan tidak selalu mudah untuk mengisolasi akar penyebab masalah kinerja, yang hanya menambah stres.
Menyetel database SQL Server Anda adalah cara yang bagus untuk menyelesaikan beberapa masalah kinerja Anda, tetapi mungkin tidak selalu jelas di mana Anda harus memulai proses pengoptimalan. Jika Anda mengesampingkan ruang disk, memori, dan pembunuh kinerja jaringan dan perangkat keras lainnya, dan kinerja SQL Server Anda masih tertinggal, saatnya untuk menggali kueri Anda.
Kueri yang tidak dioptimalkan dapat menyebabkan berbagai masalah kinerja untuk sistem Anda. Sisi baiknya, beberapa kesalahan kueri umum bertanggung jawab atas sebagian besar penurunan kinerja database.
Jika kueri Anda mengalami salah satu dari enam masalah ini, bersiaplah untuk beberapa penyesuaian kinerja yang serius.
Masalah Kueri No. 1:Ekspresi Suka dengan Karakter Liar Utama
Wildcard terkemuka mencegah MySQL menggunakan indeks, memaksa pemindaian tabel penuh bahkan jika Anda telah mengindeks bidang di dalam tabel. Memindai semua baris dalam tabel secara signifikan memperlambat pengiriman hasil kueri Anda, jadi hilangkan karakter pengganti utama untuk meningkatkan efisiensi.
Masalah Kueri No. 2:Kolom Tidak Terindeks Digunakan di Klausul 'Di Mana' dan 'Grup Menurut'
Kolom pengindeksan membantu mengembalikan hasil kueri lebih cepat karena menghilangkan kebutuhan untuk pemindaian tabel penuh. Pengindeksan juga membantu mengurutkan catatan saat dikembalikan dan menjamin catatan tersebut dapat diidentifikasi secara unik, yang sangat berguna dalam tabel dengan lebih dari 10 baris.
Untuk sedikit perspektif, pertimbangkan untuk menjalankan pernyataan "jelaskan" dalam analisis kueri Anda sebelum dan sesudah pengindeksan. Ini akan memberi Anda gambaran tentang berapa banyak baris pemindaian yang baru saja Anda simpan sendiri.
Pertanyaan Masalah No. 3:Pernyataan Suka yang Menggunakan Operator 'atau' Alih-alih Klausa Serikat
Menjalankan kueri menggunakan operator perbandingan “atau” pada bidang atau kolom dalam tabel dapat bermanfaat, tetapi menerapkan “atau” terlalu sering dalam klausa “di mana” adalah jalur cepat lainnya untuk pemindaian tabel lengkap.
Klausa gabungan dapat membuat kueri SQL berjalan lebih cepat, terutama jika indeks yang berbeda mengoptimalkan setiap sisi kueri. Pada dasarnya, operator gabungan mengambil hasil dari dua kueri yang diindeks dengan cepat dan menggabungkannya menjadi satu.
Masalah Kueri No. 4:Pencarian Wildcard
Jika Anda terjebak dalam situasi di mana Anda perlu mencari dengan wildcard tetapi Anda tidak ingin kehilangan kinerja, coba gunakan pencarian teks lengkap MySQL. Pencarian teks lengkap jauh lebih cepat daripada pencarian dengan karakter wildcard, dan Anda mendapatkan manfaat tambahan dari hasil yang lebih relevan saat mencari database besar.
Nomor Kueri Masalah 5:Skema Basis Data Tidak Dioptimalkan
Anda hanya dapat meningkatkan kinerja kueri SQL jika Anda tidak juga mengoptimalkan skema database Anda. Berikut adalah beberapa tips untuk peningkatan:
Menormalkan Tabel
Redundansi data merusak kinerja, jadi pastikan untuk hanya mewakili fakta sekali dalam database. Misalnya, jika mereferensikan pelanggan di lebih dari satu tabel, hanya gunakan "nama_pelanggan" sekali, lalu gunakan "ID_pelanggan" untuk referensi berikutnya.
Gunakan Tipe Data Optimal
Beberapa poin penting yang perlu diingat dalam hal tipe data:
- Lebih pendek lebih baik saat mendesain tabel. Misalnya, gunakan tipe data "TINYINT" untuk bidang "user_id" untuk tabel pengguna sistem dengan kurang dari 100 pengguna.
- Gunakan tipe data “date_time” jika bidang mengharapkan nilai tanggal sehingga Anda tidak perlu mengonversi catatan ke format tanggal setelahnya.
- MySQL bekerja lebih baik dengan nilai integer daripada dengan tipe data teks, termasuk varchar.
Hindari Nilai Null
Nilai nol dalam kolom dapat merusak hasil kueri Anda, jadi Anda mungkin perlu menetapkan nilai default untuk bidang yang catatannya tidak memerlukan nilai wajib.
Jangan Gunakan Terlalu Banyak Kolom
Tabel lebar (lebih dari 100 kolom) membutuhkan banyak CPU dan sumber daya untuk diproses. Kecuali Anda benar-benar harus menyertakan tabel lebar, lebih baik untuk membaginya menjadi tabel logis yang lebih kecil.
Optimalkan Bergabung
Pernyataan SQL dengan terlalu banyak gabungan (dan bergabung dengan terlalu banyak tabel) memengaruhi kinerja secara negatif. Bidik tidak lebih dari 12 gabungan untuk setiap kueri.
Masalah Kueri No. 6:Kueri MySQL yang Tidak Di-cache
Situs web dan aplikasi yang melakukan banyak kueri pemilihan akan mendapat manfaat dari cache kueri MySQL. Caching kueri MySQL mempercepat kinerja selama operasi baca karena cache kueri pemilihan di samping kumpulan data yang dihasilkan dan diambil dari memori (bukan disk) jika kueri dijalankan lebih dari sekali.
Penyesuaian kinerja sangat penting untuk menjaga ketersediaan tinggi untuk database SQL Server Anda dan memastikan pengguna akhir Anda senang. Namun sayangnya, tidak selalu jelas di mana penyetelan paling dibutuhkan. Jika Anda telah menghilangkan sumber jaringan dan perangkat keras yang jelas untuk masalah kinerja, alihkan fokus Anda ke pertanyaan Anda.
Jika Anda telah bekerja sebagai DBA untuk waktu yang lama, Anda mungkin menemukan satu (atau semua) pertanyaan masalah ini. Sekarang Anda tahu apa yang harus diwaspadai, proaktif dalam inisiatif peningkatan kinerja Anda dan perbaiki poin masalah kueri umum ini sehingga Anda dapat menuai manfaat dari pengoptimalan kueri SQL Server.