SQL最佳化1
Oracle版本:12.2
作業系統:Oracle Linux 7.4
SQL語句如下:
因為應用系統是很多年的系統,開發反饋基本不讓動程式碼的, zb_1ddb, xb_2ddb 都是單表的檢視;
select zb_1ddb.jm,
sum(zb_1ddb.zb_1005) + sum(zb_1ddb.zb_1009) as GTYS1001,
sum(zb_1ddb.zb_1006) as GTYS1002,
sum(zb_1ddb.zb_1007) as GTYS1003,
sum(XB_2DDB.XB_2003) as GTYS1005,
sum(zb_1ddb.zb_1002) as GTYS1006
from zb_1ddb, xb_2ddb
where 1 = 1
and zb_1ddb.ymd >= to_date('2020-04-01', 'yyyy-mm-dd')
and zb_1ddb.ymd < to_date('2020-05-01', 'yyyy-mm-dd')
and xb_2ddb.ymd >= to_date('2020-04-01', 'yyyy-mm-dd')
and xb_2ddb.ymd < to_date('2020-05-01', 'yyyy-mm-dd')
and zb_1ddb.jm = xb_2ddb.jm
and zb_1ddb.ymd = xb_2ddb.ymd
and zb_1ddb.jm <> '+ '
group by zb_1ddb.jm;
拿到語句後,看了看語句沒有什麼特別之處,無非就是兩個結果集關聯過濾,但結果只返回16行資料,但消耗38秒,看如下執行計劃:
看到執行計劃發現,被驅動表關聯列也是走的索引 INDEX_XB2_003 但掃描了570次,很明顯執行計劃有問題,這兩個檢視對應的基表都30M左右。
最簡單的最粗暴的方式改變它的執行計劃:
select /*+ use_hash(zb_1ddb,xb_2ddb) */
zb_1ddb.jm,
sum(zb_1ddb.zb_1005) + sum(zb_1ddb.zb_1009) as GTYS1001,
sum(zb_1ddb.zb_1006) as GTYS1002,
sum(zb_1ddb.zb_1007) as GTYS1003,
sum(XB_2DDB.XB_2003) as GTYS1005,
sum(zb_1ddb.zb_1002) as GTYS1006
from zb_1ddb, xb_2ddb
where 1 = 1
and zb_1ddb.ymd >= to_date('2020-04-01', 'yyyy-mm-dd')
and zb_1ddb.ymd < to_date('2020-05-01', 'yyyy-mm-dd')
and xb_2ddb.ymd >= to_date('2020-04-01', 'yyyy-mm-dd')
and xb_2ddb.ymd < to_date('2020-05-01', 'yyyy-mm-dd')
and zb_1ddb.jm = xb_2ddb.jm
and zb_1ddb.ymd = xb_2ddb.ymd
and zb_1ddb.jm <> '+ '
group by zb_1ddb.jm;
居然秒出了。。再次檢視執行計劃
建議:如果能在修改檢視重構的情況下儘量修改,少用HINT,儘量讓Oracle 自己判斷,我這也是沒辦法的辦法了。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30327022/viewspace-2691103/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於Oracle的sql最佳化(1)OracleSQL
- 微課sql最佳化(17)、不改程式碼,最佳化SQL(1)-最佳化方法總結SQL
- sql最佳化:使用sql profile最佳化sql語句SQL
- 微課sql最佳化(1)、基礎概念介紹SQL
- 微課sql最佳化(12)、表的連線方法(1)-幫助網友最佳化報表SQLSQL
- SQL最佳化SQL
- 【SQL最佳化】SQL最佳化的10點注意事項SQL
- PL/SQL最佳化SQL
- sql最佳化(mysql)MySql
- SQL最佳化方案SQL
- sql最佳化技巧SQL
- Sql最佳化(十三)分散式環境中的最佳化(1)合理設計資料流SQL分散式
- Sql最佳化(十一) 避免對資料的重複掃描(1)SQL
- Sql最佳化(十八) 調優工具(1)set autotrace和excute plan tableSQL
- 小米 sql 最佳化工具SQL
- SQL最佳化問題SQL
- SQL 最佳化手冊SQL
- SQL最佳化(一) 索引SQL索引
- sql最佳化工具SQLTSQL
- Oracle SQL效能最佳化OracleSQL
- Oracle sql 效能最佳化OracleSQL
- 最佳化sql語句SQL
- SQL最佳化 之 -- joinSQL
- SQL的最佳化[轉]SQL
- 08SQL最佳化SQL
- SQL語句最佳化SQL
- SQL效能最佳化之索引最佳化法SQL索引
- 效能最佳化之SQL語句最佳化SQL
- Oracle效能最佳化之SQL最佳化(轉)OracleSQL
- 推理最佳化(1)
- 使用SQL Profile進行SQL最佳化案例SQL
- 史上最全SQL最佳化方案SQL
- 最佳化sql的利器SQLTSQL
- sql最佳化工具之--sqlTSQL
- Oracle SQL的最佳化[轉]OracleSQL
- Oracle SQL最佳化總結OracleSQL
- SQL最佳化好助手:RunstatsSQL
- Oracle SQL Like 的最佳化OracleSQL