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

Mengapa kueri berparameter menghasilkan rencana kueri yang jauh lebih lambat vs kueri non-parameter?

Tampaknya perencana kueri telah membuat keputusan dalam kueri literal yang didasarkan pada informasi yang sudah dimilikinya. Itu akan memiliki statistik yang dapat kueri secara efisien berdasarkan penyebaran data yang diberikan dalam literal spesifik Anda.

Kueri berparameter telah memilih kueri yang diyakini paling adil untuk semua data di tabel Anda, yang akan Anda lihat adalah banyak loop bersarang (kinerja =buruk).

Mungkin Anda dapat mencoba dan menjalankan alat pengoptimalan basis data di basis data Anda untuk melihat apakah beberapa indeks dapat membantu Anda di sini?

Khususnya dalam kueri Anda, coba ini:

declare @p0 int
set @p0 = 1000
select *
from foo
join bar on bar.x = foo.x
join baz on baz.y = foo.y
where foo.x = @p0
OPTION ( OPTIMIZE FOR (@p0 = 1000))

Tapi saya akan berhati-hati melakukan ini tanpa memastikan bahwa data yang terkandung dalam kueri ini tidak akan berubah dan bahwa kueri Anda pada paket ini akan SELALU lebih efisien.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ubah Fungsi Bernilai Tabel di SQL Server

  2. Cara Memodifikasi Periode Retensi Change Data Capture (CDC) di SQL Server - Tutorial SQL Server

  3. Berapa ukuran yang Anda gunakan untuk varchar(MAX) dalam deklarasi parameter Anda?

  4. CTE loop tak terbatas dengan OPTION (maxrecursion 0)

  5. Menggunakan sp_help_jobschedule di SQL Server