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

Apakah ada perbedaan kinerja antara CTE , Sub-Query, Tabel Sementara atau Variabel Tabel?

SQL adalah bahasa deklaratif, bukan bahasa prosedural. Artinya, Anda membuat pernyataan SQL untuk menggambarkan hasil yang Anda inginkan. Anda tidak memberi tahu mesin SQL bagaimana untuk melakukan pekerjaan.

Sebagai aturan umum, sebaiknya biarkan mesin SQL dan pengoptimal SQL menemukan rencana kueri terbaik. Ada banyak upaya orang-tahun yang dilakukan untuk mengembangkan mesin SQL, jadi biarkan para insinyur melakukan apa yang mereka tahu caranya.

Tentu saja, ada situasi di mana rencana kueri tidak optimal. Kemudian Anda ingin menggunakan petunjuk kueri, menyusun ulang kueri, memperbarui statistik, menggunakan tabel sementara, menambahkan indeks, dan sebagainya untuk mendapatkan kinerja yang lebih baik.

Adapun pertanyaan Anda. Kinerja CTE dan subkueri secara teori harus sama karena keduanya memberikan informasi yang sama kepada pengoptimal kueri. Satu perbedaannya adalah bahwa CTE yang digunakan lebih dari sekali dapat dengan mudah diidentifikasi dan dihitung sekali. Hasilnya kemudian dapat disimpan dan dibaca beberapa kali. Sayangnya, SQL Server tampaknya tidak memanfaatkan metode pengoptimalan dasar ini (Anda dapat menyebutnya penghapusan subkueri umum ini).

Tabel sementara adalah masalah yang berbeda, karena Anda memberikan lebih banyak panduan tentang bagaimana kueri harus dijalankan. Satu perbedaan utama adalah bahwa pengoptimal dapat menggunakan statistik dari tabel sementara untuk menetapkan rencana kuerinya. Ini dapat menghasilkan peningkatan kinerja. Juga, jika Anda memiliki CTE (subquery) rumit yang digunakan lebih dari sekali, maka menyimpannya di tabel sementara akan sering memberikan peningkatan kinerja. Kueri dijalankan hanya sekali.

Jawaban atas pertanyaan Anda adalah Anda perlu bermain-main untuk mendapatkan kinerja yang Anda harapkan, terutama untuk kueri kompleks yang dijalankan secara teratur. Di dunia yang ideal, pengoptimal kueri akan menemukan jalur eksekusi yang sempurna. Meskipun sering terjadi, Anda mungkin dapat menemukan cara untuk mendapatkan performa yang lebih baik.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan parameter output prosedur tersimpan di C#

  2. Temukan Asosiasi Antara Akun Email Database dan Prinsipal Database di SQL Server (T-SQL)

  3. Mengapa saya tidak dapat menggunakan alias dalam kolom count(*) dan merujuknya ke dalam klausa yang memiliki?

  4. Pola Desain untuk Bidang Kustom dalam Basis Data Relasional

  5. Alat untuk Membuat Skrip Data Tabel