優化子查詢sql語句為內連線

2022-02-24 17:36:29 字數 1096 閱讀 3123

背景:

希望提高查詢的效率,從sql語句中頻繁出現的子查詢入手。

資料表如下:student表中的citycode對應於city表中的code。

student表:                      city表:

子查詢方式:

sql語句如下:

1

select * from

student

2where

citycode 3in

4 (select code from city)

內連線方式:

sql語句如下:

1

select a.* from

2student a inner join city b

3 on a.citycode=b.code

二者的檢索結果一致,如圖:

對於簡單檢索而言,尤其是在資料量小的情況下,二者並無差異,可能會引起同學的質疑,憑什麼說連線的方式比子查詢的方式要好,拿不出證據,老子弄死你們。

於是,需要借助sql server的效能優化指標,在sql server查詢語句之前,新增如下兩行語句即可,sql語句如下:

1

setstatistics time on

2set statistics io on

然後,開啟結果標籤右側的訊息標籤,這是內連線的訊息:

這是子查詢的訊息:

注意在子查詢中city表邏輯讀取了8次,而連線中只有1次。不要在意時間,因為資料量較小,所以子查詢的時候更快一些,等資料量上去,你就懂了。

SQL查詢語句,內連線,外連線

這幾天做軟體綜合設計的專案,我負責的是服務端,因為目前打算從前端轉型到後台,所以需要補足後台相關的知識。關於專案方面的東西就不介紹了,因為文章的主題是sql,直接給出資料表的設計圖。表之間的連線線表示外來鍵。以專案中的查詢為例,講述巢狀查詢語句以及表之間的連線。1 獲取某一問題的所有回答 回答者 回...

mysql資料庫sql優化 子查詢優化

1 什麼是子查詢 表關聯查詢 子查詢 是指在主sql語句中的select或where子句中使用select查詢語句 select a.name,select b.name from b where b.id a.id from a where a.name lik a 表關聯查詢 指多個表聯合查詢 ...

sql查詢語句 連線語句

若乙個查詢同時涉及兩個以上的表,則稱之為連線查詢。它包括等值連線,非等值連線,自然連線,自身連線,外連線和復合條件連線 表名1.列名1 連線運算子 表名2.列名2 當連線運算子為等號 時,稱為等值連線 使用其它運算子時,稱為非等值連線。若在等值連線中把目標列中重複的屬性列去掉則為自然連線。查詢每個學...