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):
Query 2 (Q2):
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
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()
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
Leave a Comment