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

Apakah SQL Server mengoptimalkan perhitungan DATEADD dalam kueri pemilihan?

Fungsi SQL Server yang dianggap konstanta waktu proses dievaluasi hanya sekali. GETDATE() adalah fungsi seperti itu, dan DATEADD(..., constant, GETDATE()) juga merupakan konstanta runtime. Dengan membiarkan pemanggilan fungsi aktual di dalam kueri, Anda membiarkan pengoptimal melihat nilai apa yang sebenarnya akan digunakan (sebagai lawan dari nilai variabel yang diendus) dan kemudian ia dapat menyesuaikan estimasi kardinalitasnya, mungkin menghasilkan rencana yang lebih baik.

Baca juga ini:Pemecahan Masalah Performa Kueri Buruk:Lipat Konstan dan Evaluasi Ekspresi Selama Estimasi Kardinalitas .

@Martin Smith

Anda dapat menjalankan kueri ini:

set nocount on;
declare @known int;
select @known = count(*) from sysobjects;
declare @cnt int = @known;
while @cnt = @known
    select @cnt = count(*) from sysobjects where getdate()=getdate()
select @cnt, @known;

Dalam kasus saya setelah 22 detik itu mengenai kasus batas dan loop keluar. Yang penting adalah bahwa loop keluar dengan @cnt nol . Orang akan berharap bahwa jika getdate() dievaluasi per baris maka kita akan mendapatkan @cnt berbeda dari hitungan @known yang benar, tetapi bukan 0. Fakta bahwa @cnt adalah nol ketika loop ada menunjukkan setiap getdate() dievaluasi sekali dan kemudian nilai konstan yang sama digunakan untuk setiap baris pemfilteran WHERE (tidak ada yang cocok). Saya sadar bahwa satu contoh positif tidak membuktikan teorema, tetapi saya pikir kasusnya cukup meyakinkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengotomatiskan Defragmentasi Indeks di Database MS SQL Server

  2. Kesalahan penginstalan SQL Server 2008:Rilis sebelumnya dari Microsoft Visual Studio 2008

  3. Temukan Dependensi di SQL Server:sql_expression_dependencies

  4. Apa itu Koneksi Tepercaya?

  5. Saran kinerja SQL Server dari Brent Ozar dan Pinal Dave