Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

5 Sintaks SQL dan Prinsip Kueri untuk Pemantauan Basis Data yang Lebih Baik

Mengadopsi sintaks SQL dan praktik penulisan kueri yang baik akan meningkatkan efektivitas pemantauan basis data Anda dan, sebagai hasilnya, meningkatkan kinerja basis data Anda secara keseluruhan. Ada beberapa cara yang terbukti benar untuk meningkatkan kinerja database melalui sintaks dan penyesuaian kueri. Kami memilih 5 untuk fokus.

1. Ekspresi KASUS

Berikut adalah beberapa praktik terbaik untuk mendapatkan performa terbaik dari ekspresi CASE:

  • Ekspresi CASE meningkatkan kinerja dengan memindahkan kode prosedural lama ke dalam kode deklaratif yang kemudian dapat dioptimalkan. Untuk ekspresi CASE dasar, gunakan , yang paling mudah dioptimalkan. Untuk ekspresi CASE yang diperluas, hashing dan teknik lainnya akan menjadi yang paling berguna.
  • Karena klausa WHEN diuji dari kiri ke kanan, yang terbaik adalah mengatur klausa Anda sehingga yang paling mungkin dicantumkan terlebih dahulu. Ini akan mengurangi waktu yang dihabiskan untuk pemindaian yang tidak perlu.
  • Sebagian besar pengoptimal juga memfaktorkan pengujian yang berlebihan dengan mempertimbangkan urutan eksekusi. Segera setelah klausa WHEN dieksekusi, tidak perlu menguji klausa itu lagi. Namun, banyak pengoptimal tidak pandai membaca ekspresi CASE bersarang, jadi yang terbaik adalah meratakannya ke satu tingkat.

2. Double-Dipping dan Klausa Jendela

Dalam SQL, "double-dipping" berarti mengunjungi tabel yang sama lebih dari sekali, yang memperlambat kueri Anda. Idealnya, cobalah untuk menyelesaikan semua pekerjaan Anda dalam satu kunjungan meja. Namun jika tidak memungkinkan, ada beberapa cara untuk mengurangi dampak pada performa.

Menggunakan tabel sementara yang dibuat dari tabel dasar yang sama yang disatukan bukanlah cara terbaik untuk menghindari pencelupan ganda. Solusi yang lebih baik adalah menggunakan pengoptimal mesin SQL Anda untuk menampilkan TAMPILAN dan membagikan hasilnya sebagai tabel kerja.

Jika Anda terbatas pada pengoptimal yang kurang bagus, gunakan tabel sementara dan lakukan pekerjaan secara manual.

Meskipun metode di atas sangat dapat diterima, cara terbaik untuk menghindari double-dipping adalah dengan menggunakan klausa jendela karena subklausa beroperasi mirip dengan fitur subquery. Misalnya:

  • Klausa PARTITION BY seperti GROUP BY lokal yang membagi tabel menjadi beberapa kelompok.
  • Klausa ORDER BY memberlakukan urutan yang diurutkan.
  • Bingkai jendela (ROW atau RANGE) seperti klausa WHERE lokal.

Anda dapat mengoptimalkan fungsi jendela dengan mengikuti aturan berikut:

  • Dalam indeks, urutkan kolom pada klausa PARTITION BY terlebih dahulu, kemudian pada kolom yang digunakan dalam klausa ORDER BY.
  • Sertakan kolom lain yang dirujuk dalam kueri sebagai kolom indeks yang disertakan.

3. Gunakan Prosedur Tersimpan

Pemetaan objek-relasional (ORM) menyebabkan banyak masalah kinerja ketika mereka membuat kode mereka sendiri. Jika Anda harus menggunakan ORM, tulis prosedur tersimpan Anda sendiri sehingga kinerja tidak menurun.

Ada banyak cara menggunakan prosedur tersimpan untuk meningkatkan kinerja, termasuk:

  • Mereka mendorong lebih sedikit data di seluruh jaringan, sehingga transaksi lebih cepat
  • Mereka mengaktifkan panggilan yang lebih singkat
  • Prosedur tersimpan lebih mudah dilacak di alat profil
  • Karena prosedur tersimpan adalah objek aktual dalam database Anda, lebih mudah untuk mendapatkan statistik kinerja, yang memudahkan untuk menemukan masalah kinerja
  • Peningkatan penggunaan kembali rencana eksekusi
  • Mereka membuatnya lebih mudah untuk menangani kasus tepi dan menambahkan perilaku audit atau penguncian perubahan
  • Prosedur tersimpan tidak rentan terhadap serangan injeksi SQL

4. HAPUS dan UPDATE dalam Batch

Menghapus atau memperbarui banyak data dari pemindaian tabel besar menggunakan banyak sumber daya karena kedua pernyataan dijalankan sebagai satu transaksi. Ini adalah pembunuh kinerja karena jika kesalahan terjadi saat transaksi berjalan dan Anda harus menghentikannya, sistem harus memutar kembali seluruh transaksi. Mengembalikan data dalam jumlah besar menghabiskan banyak waktu dan memblokir transaksi lainnya.

Anda dapat menghindari masalah kinerja ini dengan melakukan pembaruan dan penghapusan dalam jumlah kecil. Saat Anda menjalankan transaksi ini dalam batch, jika transaksi dihentikan, rollback jauh lebih kecil. Mengembalikan sejumlah kecil data tidak membutuhkan waktu lama, dan transaksi lain dapat berhasil saat kumpulan tersebut dikomit ke disk.

5. Jangan Ambil Lebih Banyak Kolom Dari Yang Anda Butuhkan

Salah satu penyebab utama kueri berkinerja buruk adalah mengambil kolom asing. Hindari praktik yang biasanya menghasilkan jumlah kolom yang berlebihan. Perhatikan hal berikut:

  • Penggunaan "PILIH *" yang tidak perlu dalam kueri kemungkinan akan menghasilkan lebih banyak kolom daripada yang Anda butuhkan. Ini adalah pemborosan sumber daya dan mengunci sumber daya dari pengguna lain. Sangat penting untuk tidak sembarangan menggunakan “SELECT *” dalam database SQL kolom.
  • Melakukan cut-and-paste untuk menggunakan kembali kode dapat menghasilkan kolom yang asing.
  • Saat Anda memanggil VIEW, Anda mungkin berakhir dengan kolom bersarang. Hapus kueri berperforma buruk untuk memeriksa kolom mana yang ada dan singkirkan kolom yang terlalu besar yang tidak Anda perlukan. Indikasi yang baik bahwa Anda memiliki masalah adalah bahwa Anda memiliki klausa WHERE dengan ketentuan tambahan dan klausa FROM dengan gabungan luar tambahan.

Ini hanyalah beberapa cara mengambil pendekatan yang cermat terhadap sintaks SQL dan penulisan kueri dapat meningkatkan pemantauan basis data. Jangan takut untuk mencoba yang lain. Basis data berperforma tinggi adalah kunci untuk memenuhi tujuan bisnis di setiap organisasi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:UPDATE tabel dengan menggunakan ORDER BY

  2. Menggunakan SQL Server sebagai penyimpanan Gambar

  3. Temukan indeks kemunculan terakhir dari sub-string menggunakan T-SQL

  4. Sisipkan Ke... Gabung... Pilih (SQL Server)

  5. Bagaimana cara menemukan batas kelompok bilangan urut yang bersebelahan?