在SQLSERVER中,WHERE 1=1 會降低查詢效率嗎?

今天偶然看到了一個(gè)討論,在某些情況下,需要向查詢子句用AND選擇性拼接篩選條件。為了讓SQL語句不會報(bào)錯,會在WHERE后面增加一個(gè)1=1的查詢條件。
例如

SELECT * FROM TABLE WHERE 1=1 [AND Expression1] [AND Expression2] [AND Expression3]……

那么為了防止語句報(bào)錯所添加的1=1到底會不會影響查詢的性能呢?以下我再SQLSERVER中做了實(shí)驗(yàn)。

首先我找到了一個(gè)有20萬數(shù)據(jù)的表,然后用以下四條SQL語句分別進(jìn)行了查詢,最后通過執(zhí)行計(jì)劃來分析1=1的影響。
四條語句分別為:

SELECT * FROM t_CustInfo

SELECT * FROM t_CustInfo WHERE 1=1

SELECT * FROM t_CustInfo WHERE id= 119068625 

SELECT * FROM t_CustInfo WHERE 1=1 AND id= 119068625  

1.SELECT * FROM t_CustInfo
這條語句對表的所有列進(jìn)行查詢,理論上講是會消耗最長的時(shí)間

圖片.png

經(jīng)過查詢得出以上結(jié)果

2.SELECT * FROM t_CustInfo WHERE 1=1
接下來,我在條件中加入1=1,看看查詢結(jié)果與第一條有什么差異

圖片.png

從要讀取的行數(shù)和,IO開銷來看,以上兩條語句,并沒有太大差別。

3.SELECT * FROM t_CustInfo WHERE id= 119068625
接下來通過主鍵進(jìn)行搜索,SQLSERVER的主鍵即是索引,理論上講這樣的搜索速度會很快

圖片.png

果然,IO的消耗減少了非常多,而且讀取的行數(shù)只有一行,效率非常高

4.SELECT * FROM t_CustInfo WHERE 1=1 AND id= 119068625
那么最后,把1=1和索引同時(shí)使用,SQLSEVER是會讀取20萬行呢?還是只會讀取一行?

圖片.png

結(jié)果顯示,添加1=1條件,并不會讓查詢讀取所有的行,與不添加1=1的索引查詢過程是相同的。

最終結(jié)論得出,在SQL SERVER中,WHERE 1=1 并不會影響查詢性能

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。