今天偶然看到了一個討論完慧,在某些情況下谋旦,需要向查詢子句用AND選擇性拼接篩選條件。為了讓SQL語句不會報錯屈尼,會在WHERE后面增加一個1=1的查詢條件册着。
例如
SELECT * FROM TABLE WHERE 1=1 [AND Expression1] [AND Expression2] [AND Expression3]……
那么為了防止語句報錯所添加的1=1到底會不會影響查詢的性能呢?以下我再SQLSERVER中做了實驗脾歧。
首先我找到了一個有20萬數(shù)據(jù)的表甲捏,然后用以下四條SQL語句分別進行了查詢,最后通過執(zhí)行計劃來分析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
這條語句對表的所有列進行查詢司顿,理論上講是會消耗最長的時間
圖片.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
接下來通過主鍵進行搜索,SQLSERVER的主鍵即是索引,理論上講這樣的搜索速度會很快
圖片.png
果然锨苏,IO的消耗減少了非常多疙教,而且讀取的行數(shù)只有一行,效率非常高
4.SELECT * FROM t_CustInfo WHERE 1=1 AND id= 119068625
那么最后伞租,把1=1和索引同時使用贞谓,SQLSEVER是會讀取20萬行呢?還是只會讀取一行?
圖片.png
結(jié)果顯示葵诈,添加1=1條件裸弦,并不會讓查詢讀取所有的行,與不添加1=1的索引查詢過程是相同的作喘。
最終結(jié)論得出理疙,在SQL SERVER中,WHERE 1=1 并不會影響查詢性能