SQL優化 使用關聯查詢代替子查詢

2021-08-31 17:09:33 字數 1695 閱讀 3328

sql優化--使用關聯查詢代替子查詢

測試例子:

子查詢:

selecta.*

,(select

workflowname 

from

workflowbase 

whereid=

workflowid) workflowname

from

[[zping.com

]]] a

where

a.operator='

402882ed1112669201112a8385892f33'

執行結果:

(360

行受影響)表 '

worktable

'。掃瞄計數 

360,邏輯讀取 

142334

次,物理讀取 

0次,預讀 

0次,lob 邏輯讀取 

0次,lob 物理讀取 

0次,lob 預讀 0次。

表 'workflowbase

'。掃瞄計數 

1,邏輯讀取 

1589

次,物理讀取 

0次,預讀 

0次,lob 邏輯讀取 

0次,lob 物理讀取 

0次,lob 預讀 0次。

表 '[zping.com]

'。掃瞄計數 

1,邏輯讀取 

366次,物理讀取 

0次,預讀 

0次,lob 邏輯讀取 

0次,lob 物理讀取 

0次,lob 預讀 0次。

關聯查詢:

selecta.*

,b.workflowname

from

[[zping.com

]]] a 

inner

join

workflowbase b 

ona.workflowid

=b.id

where

operator='

402882ed1112669201112a8385892f33'

執行結果:  

(360

行受影響)表 '

worktable

'。掃瞄計數 

0,邏輯讀取 

0次,物理讀取 

0次,預讀 

0次,lob 邏輯讀取 

0次,lob 物理讀取 

0次,lob 預讀 0次。

表 'workflowbase

'。掃瞄計數 

1,邏輯讀取 

1589

次,物理讀取 

0次,預讀 

0次,lob 邏輯讀取 

0次,lob 物理讀取 

0次,lob 預讀 0次。

表 '[zping.com]

'。掃瞄計數 

1,邏輯讀取 

366次,物理讀取 

0次,預讀 

0次,lob 邏輯讀取 

0次,lob 物理讀取 

0次,lob 預讀 0次。

這裡:子查詢io次數:142334

+1589+366=144289

關聯查詢io次數:1589

+366

=1922

關聯查詢是子查詢的75倍   

總結:使用子查詢和關聯查詢,一般情況下如果能用關聯查詢就不用子查詢,

子查詢快 還是關聯查詢快 SQL關聯子查詢

關聯子查詢,根本含義就是對於外部查詢返回的每一行資料,內部查詢都要執行一次,就像python裡邊說的遍歷一樣。遍歷後對符合條件的記錄進行操作。題目 查詢每門課程的成績第2名到第3名的學生資訊及該課程成績 selectwhere跟的條件的含義 查詢同乙個課程sc表的成績小於sc1表的總人數。子查詢中 ...

sql關聯查詢 子查詢綜合應用

乙個主表,關聯若干個子表,同時還要獲取子表的標識資訊,例如 人 刑滿釋放 易上訪 重點青少年,吸毒人員,臨時管控人員 應用場景就是,某某人有可能身兼數職 例如即是易上訪 又是刑滿釋放 而且還是臨時管控 可以試試如下的一攤 大多數都能看懂,歡迎提供更好的方式。select from select ai...

SQL關聯查詢

一 關聯基礎 連線查詢 查詢兩個或兩個以上資料表或檢視的查詢,通常建立在存在相互關係的父子表之間。關聯查詢 查詢的結果集中的字段可能來自多張表。要從多張表中獲取資料時,就要找到這幾張表記錄的對應關係,然後建立聯絡後分別獲取。所以連線條件 指明表之間記錄的對應關係 在關聯查詢中十分關鍵。n 張表關聯查...