Hindari Fungsi di Klausa WHERE [SQL]

Misalkan saya akan meng-eksekusi 2 buah query yang berbeda namun akan menghasilkan recordset yang sama pada tabel Production.TransactionHistory di database AdventureWorks yang sebelumnya saya coba tambahkan sebuah index pada field TransactionDate.


Query 1 (Q1):
select TransactionID,TransactionDate from 
Production.TransactionHistory
where DATEDIFF(day,TransactionDate,
GETDATE())>0

Query 2 (Q2):
select TransactionID,TransactionDate from 
Production.TransactionHistory
where TransactionDate<GETDATE()
 
Ternyata, query yang menggunakan Function dalam klausa where akan menerapkan Index Scan yang seperti kita ketahui bersama bahwa SQL SERVER akan melakukan scanning data pages mulai dari pages pertama hingga pages terakhir.
 
Sedangkan Index Seek akan melakukan Scanning data pages pada pages yang terseleksi sehingga proses pencariannya lebih baik dibandingkan dengan Index Scan.
 
Pada data kecil ini mungkin tidak begitu terasa efeknya, namun akan sangat terasa sekali bila kita bekerja dengan Very Large Database (VLDB)

sumber : http://sqlserver-indo.org/blogs/suherman/archive/2010/04/25/avoid-using-function-in-the-where-clause.aspx?CommentPosted=true#commentmessage


Tidak ada komentar

trims to http://sqlserver-indo.org. Diberdayakan oleh Blogger.