sql優化用group by 函式代替分析函式
SQL> Select dfId,
2 Id As Client_Id,
3 Login As Client_Name,
4 To_Char(Created_Date, 'yyyy-mm-dd') As Start_Date,
5 Sum(1) Over() As Total_Count
6 From (Select a.*
7 From tb_test1 a,
8 (Select Client_Id
9 From (Select Client_Id,
10 Event_Date,
11 Row_Number() Over(Partition By Client_Id Ord
er By Event_Date Desc) Rn
12 From tb_test1_Rolling_Daily_Repo)
13 Where Rn = 1
14 And Event_Date <
15 (Select Max(Event_Date) From tb_test1_abc_Repo
rt)) b
16 Where a.Id = b.Client_Id
17 And a.dfId = 4
18 Union
19 Select *
20 From tb_test1 a
21 Where a.dfId = 4
22 And a.Created_Date <
23 (Select Max(To_Date) From tb_test1_abc_Report) - 1
24 And a.Id Not In
25 (Select Distinct Client_Id From tb_test1_Rolling_Daily_Repo
))
26 Order By Login;
3185 rows selected.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=24 Card=171 Bytes=10
602)
1 0 WINDOW (SORT) (Cost=24 Card=171 Bytes=10602)
2 1 VIEW (Cost=24 Card=171 Bytes=10602)
3 2 SORT (UNIQUE) (Cost=24 Card=171 Bytes=24700)
4 3 UNION-ALL
5 4 HASH JOIN (Cost=10 Card=19 Bytes=3268)
6 5 VIEW (Cost=3 Card=19 Bytes=665)
7 6 WINDOW (SORT PUSHED RANK) (Cost=3 Card=19 Byte
s=228)
8 7 INDEX (FULL SCAN) OF 'IDX_CRDR_CLIENT_GAME_E
VENT' (UNIQUE) (Cost=1 Card=19 Bytes=228)
9 6 SORT (AGGREGATE)
10 9 INDEX (FULL SCAN (MIN/MAX)) OF 'FKINDEX5_711
' (NON-UNIQUE) (Cost=3 Card=2156978 Bytes=17255824)
11 5 TABLE ACCESS (FULL) OF 'tb_test1' (Cost=6 Card=
3189 Bytes=436893)
12 4 HASH JOIN (ANTI) (Cost=8 Card=152 Bytes=21432)
13 12 TABLE ACCESS (FULL) OF 'tb_test1' (Cost=6 Card=
159 Bytes=21783)
14 13 SORT (AGGREGATE)
15 14 INDEX (FULL SCAN (MIN/MAX)) OF 'FKINDEX4_101
' (NON-UNIQUE) (Cost=3 Card=2156978 Bytes=17255824)
16 12 INDEX (FULL SCAN) OF 'IDX_CRDR_CLIENT_GAME_EVENT
' (UNIQUE) (Cost=1 Card=19 Bytes=76)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
268 consistent gets
0 physical reads
0 redo size
73882 bytes sent via SQL*Net to client
2828 bytes received via SQL*Net from client
214 SQL*Net roundtrips to/from client
3 sorts (memory)
0 sorts (disk)
3185 rows processed
用row_number() over 分析函式一致性讀為268
SQL> Select dfId,
2 Id As Client_Id,
3 Login As Client_Name,
4 To_Char(Created_Date, 'yyyy-mm-dd') As Start_Date,
5 Sum(1) Over() As Total_Count
6 From (Select a.*
7 From tb_test1 a,
8 (select client_id
9 from (Select Client_Id, max(Event_Date) event_date
10 From tb_test1_Rolling_Daily_Repo
11 group by Client_Id)
12 where Event_Date <
13 (Select Max(Event_Date) From tb_test1_abc_Repo
rt)) b
14 Where a.Id = b.Client_Id
15 And a.dfId = 4
16 Union
17 Select *
18 From tb_test1 a
19 Where a.dfId = 4
20 And a.Created_Date <
21 (Select Max(To_Date) From tb_test1_abc_Report) - 1
22 And a.Id Not In
23 (Select Distinct Client_Id From tb_test1_Rolling_Daily_Repo
))
24 Order By Login;
3185 rows selected.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=17 Card=153 Bytes=94
86)
1 0 WINDOW (SORT) (Cost=17 Card=153 Bytes=9486)
2 1 VIEW (Cost=17 Card=153 Bytes=9486)
3 2 SORT (UNIQUE) (Cost=17 Card=153 Bytes=21582)
4 3 UNION-ALL
5 4 NESTED LOOPS (Cost=2 Card=1 Bytes=150)
6 5 VIEW (Cost=1 Card=1 Bytes=13)
7 6 FILTER
8 7 SORT (GROUP BY) (Cost=1 Card=1 Bytes=12)
9 8 INDEX (FULL SCAN) OF 'IDX_CRDR_CLIENT_GAME
_EVENT' (UNIQUE) (Cost=1 Card=19 Bytes=228)
10 7 SORT (AGGREGATE)
11 10 INDEX (FULL SCAN (MIN/MAX)) OF 'FKINDEX5_7
11' (NON-UNIQUE) (Cost=3 Card=2156978 Bytes=17255824)
12 5 TABLE ACCESS (BY INDEX ROWID) OF 'tb_test1' (Co
st=1 Card=1 Bytes=137)
13 12 INDEX (UNIQUE SCAN) OF 'PK_tb_test1' (UNIQUE)
14 4 HASH JOIN (ANTI) (Cost=8 Card=152 Bytes=21432)
15 14 TABLE ACCESS (FULL) OF 'tb_test1' (Cost=6 Card=
159 Bytes=21783)
16 15 SORT (AGGREGATE)
17 16 INDEX (FULL SCAN (MIN/MAX)) OF 'FKINDEX4_101
' (NON-UNIQUE) (Cost=3 Card=2156978 Bytes=17255824)
18 14 INDEX (FULL SCAN) OF 'IDX_CRDR_CLIENT_GAME_EVENT
' (UNIQUE) (Cost=1 Card=19 Bytes=76)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
159 consistent gets
0 physical reads
0 redo size
73882 bytes sent via SQL*Net to client
2828 bytes received via SQL*Net from client
214 SQL*Net roundtrips to/from client
3 sorts (memory)
0 sorts (disk)
3185 rows processed
SQL>
用group by 函式一致性讀為 159 減少了268-159=109 個一致性讀
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-214932/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL函式Group_concat用法SQL函式
- SQL-函式 - 聚合函式SQL函式
- sql函式SQL函式
- Sql 中的 left 函式、right 函式SQL函式
- T-SQL——函式——字串操作函式SQL函式字串
- 【SQL】19 SQL函式SQL函式
- T-SQL——函式——時間操作函式SQL函式
- Oracle分析函式與視窗函式Oracle函式
- SQL程式設計:group by合併結果字串 —> group_concat函式就能行SQL程式設計字串函式
- SQL 視窗函式SQL函式
- SQL LEN()函式用法SQL函式
- SQL優化案例-自定義函式索引(五)SQL優化函式索引
- 使用SQL以及函式等做資料分析SQL函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- Excel 優化函式Excel優化函式
- SQL中的cast()函式SQLAST函式
- SQL Server 2016 函式:CASTSQLServer函式AST
- 確定性函式改造sql函式SQL
- Spark SQL 開窗函式SparkSQL函式
- SQL---------儲存函式SQL儲存函式
- SQL Server常用函式整理SQLServer函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- Oracle分析函式之開窗函式over()詳解Oracle函式
- SQL視窗分析函式使用詳解系列三之偏移量類視窗函式SQL函式
- SQL中常用的字串LEFT函式和RIGHT函式詳解!SQL字串函式
- Hive之分析函式Hive函式
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- (譯) 函式式 JS #2: 函式!函式JS
- (未完成)APC函式的執行,分析 KiDeliverApc 函式函式IDE
- 與SQL視窗函式相同SQL函式
- SQL語言基礎(函式)SQL函式
- 核函式 多項式核函式 高斯核函式(常用)函式
- React函式式元件的效能優化React函式元件優化
- 分析WordPress中esc_sql函式引起的注入危害SQL函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter