以下兩種語法搜尋出來的資料相同,但是哪一種語法效能比較高?
(1)
select TS.SN 學生學號 , TS.Name 學生姓名
from TS INNER JOIN TSC
ON TSC.SSN = TS.SN
INNER JOIN TC
ON TSC.CSN=TC.SN
where
TC.Name='稅收基礎'
(2)
select SN,Name
from TS
where SN in (
SELECT SSN SN FROM TC,TSC WHERE TC.SN=TSC.CSN and TC.Name='稅收基礎'
我想知道的是 如果作多表關聯 , 是不是優先用 Join ....On 會比用 in(select ....) 子查詢要來的好呢?
看起來用 Join...On 只要做一次 select 就可以了,似乎應當效能較好。
我不確定我的想法是否正確,感謝你的回覆與解答。
不是有效能監測工具可以用
這個涉及的議題非常廣
包含資料的數量,索引的建立,Where 是不是用主鍵,Join 是不用主鍵
查詢是不是包含在SP裡(他會編譯最佳)
......
在這裡只針對樓的的問題說明,就不對其他的擴充多作說明了..
1.請樓主有空先去查一下SQL-92的標準語法說明,看看Join出現前後不同處及用法。
2.Join 的 ON() 用法在於資料表的內在條件應用(資料表關聯用)。
Where 裡的 IN() 使用的是資料表的外在條件應用(外在條件的範圍)。
3.SQL-92,在Join出現前,Where同時肩負著資料表的內在及外在條件的應用,因此
常發生程式不易除錯及資料關聯過於龐大時,效能不佳等問題(索引鍵指定不明確)。
以上說明希望對你有所幫助。
以我的經驗白話點來說,join on ()效率會比較好,但有前提:
否則資料量大時,效能與where...in差異不大。
而where...in的效能較慢,summertw的第3點已經解釋了...
summertw提到:
3.SQL-92,在Join出現前,Where同時肩負著資料表的內在及外在條件的應用,因此常發生程式不易除錯及資料關聯過於龐大時,效能不佳等問題(索引鍵指定不明確)。
白話一點說,就是SQL會將每一筆資料都去比in裡面的子查詢,所以如果TS有1000筆,則in的子查詢需要跑1000次...,所以除非不得已,請少用in + 子查詢。
希望對你有幫助!