SQL最佳化案例-union代替or(九)
隨著Oracle版本的提升,最佳化器更趨向於智慧,比如,12c中的標量子查詢被transform成外連線。
select (select max(object_id) from test2 b where b.object_id =a.object_id) from test1 a;
11g中執行計劃如下:
進入正題,當SQL中同時有or和子查詢時,這種情況下查詢無法展開(unnest),遇到這種情況只能改SQL來改變執行計劃,並且在12c或18c中都沒有智慧改寫。
select * from test1 where owner = 'SCOTT' or object_id in (select object_id from test2);
在不改寫SQL的情況下我們在test2的join列上建立索引
create index idx_objid on test2(object_id);
下面用union改寫sql
select * from test1 where owner = 'SCOTT' union select * from test1 where object_id in (select object_id from test2);
案例較為簡單,希望透過此案例讓大家瞭解最佳化器的一些行為,和unnest產生filter的一些情形。
| 作者簡介
姚崇·沃趣科技高階資料庫技術專家
熟悉Oracle、MySQL資料庫內部機制,豐富的Oracle、MySQL故障診斷、效能調優、資料庫備份恢復、複製、高可用方案及遷移經驗。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2221561/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL優化案例-union代替or(九)SQL優化
- Oracle優化案例-union代替or(九)Oracle優化
- Oracle優化案例-又見union代替or(二十)Oracle優化
- union all 最佳化案例
- kingbase SQL最佳化案例 ( union遞迴 改 cte遞迴 )SQL遞迴
- SQLT 最佳化SQL 用複合索引代替單列索引的案例SQL索引
- SQL Union和SQL Union All用法(轉)SQL
- OceanBase 金融專案最佳化案例(union all 改寫)
- sql中union和union allSQL
- 【SQL最佳化】UNION替換OR效率測試及總結SQL
- ORACLE SQL效能最佳化系列 (九) (轉)OracleSQL
- sql中union和union all的用法SQL
- 【SQL】UNION ALL 與UNION 的區別SQL
- SQL UNION 和 UNION ALL 操作符SQL
- 使用SQL Profile進行SQL最佳化案例SQL
- sql中UNION和UNION ALL的區別SQL
- Sql 巢狀迴圈最佳化案例SQL巢狀
- SQL最佳化案例-使用with as最佳化Subquery Unnesting(七)SQL
- sql注入之union注入SQL
- SQL UNION 操作符 和 UNION ALL 操作符SQL
- Oracle某行系統SQL最佳化(案例四)OracleSQL
- DM 傳統行業SQL最佳化案例行業SQL
- sql_intersect交集_minus差集_並集union_union allSQL
- SQL最佳化案例-自定義函式索引(五)SQL函式索引
- Oracle某X系統SQL最佳化(案例六)OracleSQL
- SQL最佳化案例-正確的使用索引(二)SQL索引
- Oracle SQL 'or' 的最佳化,最近的案例一則。OracleSQL
- SQL最佳化案例-單表分頁語句的最佳化(八)SQL
- 【SQL 學習】UNION 的排序方式!SQL排序
- SQL最佳化案例-從執行計劃定位SQL問題(三)SQL
- 真實世界SQL最佳化案例2_訪問路徑最佳化SQL
- 幫任總DBA太太最佳化條金融SQL案例(DM資料庫案例)SQL資料庫
- Android startActivityForResult()廢棄了,代替方案案例Android
- Oracle SQL語句優化之UNIONOracleSQL優化
- sql_union all_列別名SQL
- sql 優化過程之union 替換 orSQL優化
- SQL最佳化 | MySQL問題處理案例分享三則MySql
- SQL最佳化案例-分割槽索引之無字首索引(六)SQL索引