2017-02-17 64 views
2

而不是在where子句中使用函數,我們可以做一些不同的事情。SQL優化,其中子句

使用DateAdd服用時間表現不佳我想..

如何優化這個SQL

SELECT cust_id, order_date, price 
FROM customers 
WHERE DATEADD(DD,50,order_date)>=GETDATE() 

回答

7

不要order_date運行功能,在getdate()代替

select cust_id, order_date, price 
from customers 
where order_date>=dateadd(Day,-50,getdate()) 
運行逆

order_date上的函數調用將導致索引掃描,如果您改爲在篩選條件下運行您的函數getdate()您可以在此列上保留索引查找。 (如果它有一個索引)。

SARGable functions in SQL Server - Rob Farley

+0

這是更好的方式,性能明智嗎? – user1810575

+3

是的,如果您在order_date列上創建索引。 – Murthy

+0

其中order_date <= dateadd(Day,-50,getdate())或where order_date> = dateadd(Day,-50,getdate()) – user1810575