背景:
希望提高查詢的效率,從sql語句中頻繁出現的子查詢入手。
數據表如下:Student表中的CityCode對應於City表中的Code。
Student表: City表:
子查詢方式:
sql語句如下:
1 select * from Student 2 where CityCode 3 in 4 (select Code from City)
內連接方式:
sql語句如下:
1 select a.* from 2 Student a inner join City b 3 on a.CityCode=b.Code
二者的檢索結果一致,如圖:
對於簡單檢索而言,尤其是在數據量小的情況下,二者並無差異,可能會引起同學的質疑,憑什么說連接的方式比子查詢的方式要好,拿不出證據,老子弄死你們。
於是,需要借助SQL Server的性能優化指標,在SQL Server查詢語句之前,添加如下兩行語句即可,sql語句如下:
1 set statistics time on 2 set statistics io on
然后,打開結果標簽右側的消息標簽,這是內連接的消息:
這是子查詢的消息:
注意在子查詢中City表邏輯讀取了8次,而連接中只有1次。不要在意時間,因為數據量較小,所以子查詢的時候更快一些,等數據量上去,你就懂了。