1. 程式人生 > >sql中and及or 的執行效率

sql中and及or 的執行效率

應用中發現sql中的and及or的執行效率問題

sql語句,為什麼把最後的or換成and,查詢的就很快,使用的是mssql範例中northwind資料庫為例,

select * from Orders a left join [Order Details] b on a.orderid = b.orderid
where a.customerid like '%ics%' or b.productid in (42,72)

追蹤了語句的執行方案,發現使用or 時 是先執行的a 與b 交叉表,從結果集中再where出符合的記錄,由於是全集交叉所以輸出的資料量較大,執行的時間也就效長.

select * from Orders a left join [Order Details] b on a.orderid = b.orderid
where a.customerid like '%ics%' and b.productid in (42,72)

而and是先執行的where篩選出了符合的記錄再做的交叉表,所以資料量少執行起來快.

相對於or 為了提高執行速度,想了一個辦法,如下人為控制執行方案先篩選wher後交叉left

set statistics time on

select * from (select * from Orders where customerid like '%ics%') a left join
 (select * from [Order Details] b where productid in (42,72)) b on a.orderid = b.orderid

set statistics time off