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遞迴
- OceanBase 金融專案最佳化案例(union all 改寫)
- sql中union和union all的用法SQL
- sql中UNION和UNION ALL的區別SQL
- sql注入之union注入SQL
- SQL最佳化案例-使用with as最佳化Subquery Unnesting(七)SQL
- DM 傳統行業SQL最佳化案例行業SQL
- Oracle某行系統SQL最佳化(案例四)OracleSQL
- SQL最佳化案例-正確的使用索引(二)SQL索引
- SQL最佳化案例-自定義函式索引(五)SQL函式索引
- Oracle某X系統SQL最佳化(案例六)OracleSQL
- SQL最佳化案例-從執行計劃定位SQL問題(三)SQL
- SQL最佳化案例-單表分頁語句的最佳化(八)SQL
- 某保險理賠核心OB SQL最佳化案例SQL
- 幫任總DBA太太最佳化條金融SQL案例(DM資料庫案例)SQL資料庫
- Android startActivityForResult()廢棄了,代替方案案例Android
- SQL最佳化案例-分割槽索引之無字首索引(六)SQL索引
- SQL最佳化 | MySQL問題處理案例分享三則MySql
- OB案例、金融行業核心系統跑批SQL最佳化行業SQL
- OceanBase金融SQL、億萬級別據量最佳化案例(Row_number 開窗 + 分頁SQL)SQL
- SQL Server中的集合運算: UNION, EXCEPT和INTERSECTSQLServer
- SQL最佳化SQL
- AWS案例研究:九號公司
- 使用sql tuning advisor最佳化sqlSQL
- SQL最佳化1SQL
- SQL最佳化方案SQL
- sql最佳化技巧SQL
- union 和union all 使用區別
- union all和union的區別
- union和union all 關鍵字
- MySQL學習(五) UNION與UNION ALLMySql
- Oracle優化案例-用left join代替反連線 not in not exists(十)Oracle優化
- SQL 最佳化手冊SQL
- 小米 sql 最佳化工具SQL