SQL使用中的優化

可以參照博文: http://www.nowamagic.net/librarys/veda/detail/1502

1、選擇最有效的表明順序(僅適用於RBO模式)

****不同的數據庫的解析器對from後的跟的表名處理順序有所不同----記錄數量最小的放在最右端****

2、select 查詢中避免使用“*”

3、儘量減少訪問數據庫次數。

4、刪除重複記錄

5、多使用Exists,少使用IN

1

SELECT PUB_NAME FROM PUBLISHERS

2

WHERE PUB_ID IN

3

(SELECT PUB_ID FROM TITLES WHERE TYPE = 'BUSINESS')

可以用下面語句代替:


1

SELECT PUB_NAME FROM PUBLISHERS WHERE EXISTS

2

(SELECT 1 FROM TITLES WHERE TYPE = 'BUSINESS' AND

3

PUB_ID= PUBLISHERS.PUB_ID)


 in和exists的區別與執行效率問題


例子:

select * from T1 where T1.id in (select T2.id from T2);

select * from T1 where exists(select 1 from T2 where T2.id = T1.id);

忠告:

若T2中的數據量明顯少用in比用exists合適

若T2中的數據量明顯多用exists比用in合適


總結:IN把外表和內表做hash  join  ,而exists對外表做loop(循環遍歷),每次loop再對內標進行查詢。這樣一來,in適合內外表都很大的情況,exists適合外表結果集比較小的情況。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章