exists、in的運用場景
exists、in的運用場景
能不寫子查詢,儘量不寫子查詢,而是直接編寫多表連線操作。理由如下:
① oracle CBO在parse階段,會盡可能把子查詢轉化為多表連線
② 子查詢可讀性較低
③ 複雜的邏輯,子查詢可能導致oracle CBO選擇錯誤的執行路徑
但如果必須寫子查詢,到底是in還是exists?exists/not exists專門用於關聯子查詢。10g之後,oracle對in的改進,這兩者無甚區別。
in和select的技術原理:
㈠ in:先進行子查詢,再進行主查詢
㈡ exists:先進行主查詢,再到子查詢中過濾
in和exists的使用建議:
Ⅰ 如果限制性強的條件在子查詢,則使用in
Ⅱ 如果限制性強的條件在主查詢,則使用exists
可用查詢結果集來理解上面這段話,採用最最佳化匹配原則:拿最小記錄匹配大記錄。限制性強,則結果集小;反之,則大。
註釋:
① 使用exists可以將子查詢結果定位常量,不影響查詢結果,而且,效率高。
比如:
[sql]
select e.*
from emp e
where exists
(select 1 from dept d
where e.deptno=d.deptno and
d.dname='SALES')
② not in可能會因為null而改變其行為導致和not exists結果集有出入。然而,在相關子查詢下,not in和not exists的結果集是一樣的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2124521/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【java】CountDownLatch運用場景(1)JavaCountDownLatch
- sql中in和exists的原理及使用場景。SQL
- 小程式的場景入口運用技巧
- 小程式案例:公共交通場景的運用
- 小程式使用場景:線上場景運用如何獲得使用者
- Javascript二進位制運算子的一些運用場景JavaScript
- 淺談微信公眾平臺運用的場景
- 雲端計算日常運用場景介紹!
- 數字化轉型辦公室的運用場景有哪些?
- API介面的運用場景以及獲取方式API
- 「進擊Redis」六、Redis List運用場景、API解析RedisAPI
- FRAM的應用場景
- Numpy的應用場景
- redis的應用場景Redis
- Vuex 的應用場景Vue
- 運維場景下的兩個自我運維
- 遊戲新手教學的5種基本方式及其運用場景研究遊戲
- 【實操】小程式的應用場景分析——線下場景應用
- lazada商品詳情API介面運用場景及功能API
- 理解 Fragment 的應用場景Fragment
- Spark適用於哪些場景?不適用於哪些場景?Spark
- 依據大資料DPI的精準營銷與運用場景大資料
- Ubuntu的應用場景有哪些?怎麼學習linux運維UbuntuLinux運維
- ES 應用場景
- redis實用場景Redis
- Zookeeper應用場景
- 3.4 應用場景
- DDD應用場景
- BFC的概念與應用場景
- ThottleStop 軟體的應用場景
- 商品API的應用場景分析API
- SPM適用的場景和示例
- DATAGUARD實際的應用場景
- Docker 的應用場景在哪裡Docker
- SAP BTP MTA 應用的應用場景
- 雲虛擬主機運用於哪些場景中?怎麼選?
- Nginx應用場景配置Nginx
- CDN適用哪些場景?