SQL Server Indonesia User Groups Community Avoid Using Function in the WHERE Clause - suherman
Welcome to SQL Server User Group Indonesia
Sign in JoinHelp | Sign In Live ID

suherman

Share ur Knowledge

Avoid Using Function in the WHERE Clause

Sepertinya ini adalah hal sepele, namun hal ini sangat berpengaruh terhadap performance dari sebuah query.

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()

pada Q1 tampak didalam klausa WHERE menggunakan sebuah function DATEDIFF() sebagai salahsatu metoda pemfilteran datanya sedangkan pada Q2 saya tidak menggunakan function apapun.

Berikut ini adalah Execution Plan Result nya untuk Q1 :

image

dan ini adalah Execution Plan Result dari Q2 :

image

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)