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

Bagaimana saya bisa memaksa subquery untuk tampil sebaik tabel #temp?

Ada beberapa kemungkinan penjelasan mengapa Anda melihat perilaku ini. Beberapa yang umum adalah

  1. Subquery atau CTE mungkin sedang dievaluasi ulang berulang kali.
  2. Mematerialisasikan sebagian hasil menjadi #temp tabel dapat memaksa urutan gabungan yang lebih optimal untuk bagian rencana tersebut dengan menghapus beberapa opsi yang mungkin dari persamaan.
  3. Mematerialisasikan sebagian hasil menjadi #temp tabel dapat meningkatkan sisa rencana dengan mengoreksi perkiraan kardinalitas yang buruk.

Metode yang paling dapat diandalkan adalah dengan menggunakan #temp meja dan wujudkan sendiri.

Gagal mengenai poin 1, lihat Berikan petunjuk untuk memaksa materialisasi menengah dari CTE atau tabel turunan . Penggunaan TOP(large_number) ... ORDER BY sering kali dapat mendorong hasil untuk dikumpulkan daripada dievaluasi berulang kali.

Bahkan jika itu berhasil, tidak ada statistik pada kumparan.

Untuk poin 2 dan 3 Anda perlu menganalisis mengapa Anda tidak mendapatkan rencana yang diinginkan. Mungkin menulis ulang kueri untuk menggunakan predikat sargable, atau memperbarui statistik mungkin mendapatkan rencana yang lebih baik. Jika gagal, Anda dapat mencoba menggunakan petunjuk kueri untuk mendapatkan paket yang diinginkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengatur Susunan Kolom di SQL Server (T-SQL)

  2. Tidak dapat menemukan basis data pertama kode EF saya

  3. Ubah Time Zone Offset pada nilai datetimeoffset di SQL Server (T-SQL)

  4. Periksa Apakah Tabel Memiliki Kolom TIMESTAMP di SQL Server dengan OBJECTPROPERTY()

  5. Ekspresi KASUS SQL Server