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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微課sql最佳化(17)、不改程式碼,最佳化SQL(1)-最佳化方法總結SQL
- 微課sql最佳化(12)、表的連線方法(1)-幫助網友最佳化報表SQLSQL
- 微課sql最佳化(1)、基礎概念介紹SQL
- SQL最佳化SQL
- 使用sql tuning advisor最佳化sqlSQL
- SQL最佳化方案SQL
- sql最佳化技巧SQL
- SQL 最佳化手冊SQL
- 小米 sql 最佳化工具SQL
- 08SQL最佳化SQL
- SQL語句最佳化SQL
- SQL最佳化問題SQL
- oracle SQL最佳化器SQL Tuning Advisor (STA)OracleSQL
- SQL效能最佳化之索引最佳化法SQL索引
- SQL最佳化案例-使用with as最佳化Subquery Unnesting(七)SQL
- 最佳化sql的利器SQLTSQL
- Sql最佳化之回表SQL
- 史上最全SQL最佳化方案SQL
- hive06_SQL最佳化HiveSQL
- 聊一聊SQL最佳化SQL
- 效能調優——SQL最佳化SQL
- 資料庫最佳化技巧 - SQL語句最佳化資料庫SQL
- SQL最佳化案例-union代替or(九)SQL
- 最佳化SQL Server索引的技巧SQLServer索引
- sql最佳化的幾種方式SQL
- sql注入1SQL
- 【慢SQL效能最佳化】 一條SQL的生命週期SQL
- 推理最佳化(1)
- 如何在SQL Server中最佳化TempdbSQLServer
- SQL 執行 - 執行器最佳化SQL
- 這個SQL你會最佳化嗎?SQL
- SQL Server 資料太多如何最佳化SQLServer
- openGauss SQL引擎(下)——查詢最佳化SQL
- 微課sql最佳化(4)、幫助“表姐”最佳化報表SQL
- SQL最佳化案例-從執行計劃定位SQL問題(三)SQL
- SQL最佳化案例-單表分頁語句的最佳化(八)SQL
- DM 傳統行業SQL最佳化案例行業SQL
- SQL最佳化必懂概念(一):基數SQL