当前位置: 代码迷 >> Sql Server >> 關聯式子查詢(用於欄位) 與 JOIN 的比較,该如何处理
  详细解决方案

關聯式子查詢(用於欄位) 與 JOIN 的比較,该如何处理

热度:231   发布时间:2016-04-24 09:56:53.0
關聯式子查詢(用於欄位) 與 JOIN 的比較
您好:
若有A01 與A02 2個 TABLE,我想了解,他們用 JOIN 或 SUBSQUERY 的效能
我測試實資料筆數不多(10筆以內)
2種方法 實測如下:
其中
                
估計的子樹成本  A > B           :B較優
邏輯:都一樣
但經過時間     A <B              :A較快

Q1.這種測試,效能哪一個比較好?
Q2.一般說,盡量JOIN查詢,不要用子查詢 ,是指在 WHERE 條件 才算嗎?
Q3.B的效能雖然較好,但是否 A01查詢完後,再去針對每一個欄位 查一次A02,
這樣感覺上,似乎IO 要較多,但結果卻差不多,是資料數不足嗎?

Q4.相較之下,關聯式子查詢(用於欄位) 優於 與 JOIN ,這是正確嗎?

謝謝!
        
--------------------------------A
set STATISTICS IO ON
set STATISTICS TIME ON
select A01.* 
,A02.desc01
from A01 LEFT JOIN A02 
ON A01.iD=A02.id

set STATISTICS IO OFF
set STATISTICS TIME OFF
---------------------------------B
set STATISTICS IO ON
set STATISTICS TIME ON

select A01.* 
,(select A02.desc01  FROM A02 WHERE A02.id=A01.ID) 'DD'
from A01 

set STATISTICS IO OFF
set STATISTICS TIME OFF

--------------------------------A
 --估計的子樹成本 0.006532
(5 個資料列受到影響)
資料表 'A02'。掃描計數 1,邏輯讀取 5,實體讀取 0,讀取前讀取 0,LOB 邏輯讀取 0,LOB 實體讀取 0,LOB 讀取前讀取 0。
資料表 'A01'。掃描計數 1,邏輯讀取 2,實體讀取 0,讀取前讀取 0,LOB 邏輯讀取 0,LOB 實體讀取 0,LOB 讀取前讀取 0。

(1 個資料列受到影響)

SQL Server 執行次數: 
   CPU 時間 = 0 ms,經過時間 = 2 ms。

SQL Server 執行次數: 
   CPU 時間 = 0 ms,經過時間 = 1 ms。

---------------------------------B
--估計的子樹成本 0.006521

(5 個資料列受到影響)
資料表 'A02'。掃描計數 5,邏輯讀取 5,實體讀取 0,讀取前讀取 0,LOB 邏輯讀取 0,LOB 實體讀取 0,LOB 讀取前讀取 0。
資料表 'A01'。掃描計數 1,邏輯讀取 2,實體讀取 0,讀取前讀取 0,LOB 邏輯讀取 0,LOB 實體讀取 0,LOB 讀取前讀取 0。

(1 個資料列受到影響)

SQL Server 執行次數: 
   CPU 時間 = 0 ms,經過時間 = 5 ms。

SQL Server 執行次數: 
   CPU 時間 = 0 ms,經過時間 = 1 ms。

------解决思路----------------------

来源于SQL入门经典第三版
  相关解决方案