Oracle Max()/Min()類的效能最佳化
工作中的經驗。
此文寫得倉促,較為完整的探討在
http://karsus.itpub.net/post/36558/470885
[@more@]1.SELECT MAX(SEQ) FROM MO_ROUTE WHERE ISN=UPPER('NF1S6500020029' ) AND STEP <> '0';是在OMS的 TOP SQL按Disk IO排序出最高的SQL.
2.select SEQ FROM MO_ROUTE WHERE ISN=UPPER('NF1S6500020029' ) AND STEP <> '0' and rownum=1 order by seq desc;是改寫之後的.
2比1的效能好很多,幾乎完全消除了physical reads. consistent gets也少很多。按我的經驗,MAX/MIN 類這樣改寫效能都會比原先好(包括SQL Server也是如此,rownum使用TOP 1替代,在SQL2005上效果稍弱一些)。
1. PLAN:
2. 15:45:29 SQL> SELECT MAX(SEQ) FROM MO_ROUTE WHERE ISN=UPPER('NF1S6500020029' ) AND STEP <> '0';
3. 22
4.
5. Elapsed: 00:00:00.26
6.
7. Execution Plan
8. ----------------------------------------------------------
9. 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=13 Card=1 Bytes=30)
10. 1 0 SORT (AGGREGATE)
11. 2 1 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'MO_ROUTE' (Cost
12. =13 Card=9 Bytes=270)
13.
14. 3 2 INDEX (RANGE SCAN) OF 'MO_ROUTE1' (UNIQUE) (Cost=4 Car
15. d=9)
16.
17.
18.
19.
20.
21. Statistics
22. ----------------------------------------------------------
23. 18 recursive calls
24. 0 db block gets
25. 27 consistent gets-------------多次執行cache後,25
26. 23 physical reads--------------多次執行cache後,0
27. 0 redo size
28. 518 bytes sent via SQL*Net to client
29. 655 bytes received via SQL*Net from client
30. 2 SQL*Net roundtrips to/from client
31. 0 sorts (memory)
32. 0 sorts (disk)
33. 1 rows processed
2.PLAN
15:51:27 SQL> select seq FROM MO_ROUTE WHERE ISN=UPPER('NF1S6500020029' ) AND STEP <> '0' and rownum=1 order by seq desc;
22
Elapsed: 00:00:00.00
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=13 Card=1 Bytes=30)
1 0 COUNT (STOPKEY)
2 1 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'MO_ROUTE' (Cost
=13 Card=9 Bytes=270)
3 2 INDEX (RANGE SCAN DESCENDING) OF 'MO_ROUTE1' (UNIQUE)
(Cost=4 Card=9)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
5 consistent gets 首次執行和多次執行一樣。
0 physical reads
0 redo size
513 bytes sent via SQL*Net to client
655 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10856805/viewspace-1000136/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Max()/Min()類的效能優化Oracle優化
- 【最佳化】INDEX FULL SCAN (MIN/MAX)訪問路徑Index
- MAX or MIN of Indexed ColumnIndex
- min(), max()和indexIndex
- FBI? MAX? INDEX FULL SCAN (MIN/MAX)?Index
- Min-Max 容斥
- min ? max ? 執行計劃?
- python的小技巧之min,maxPython
- min ? max ? 執行計劃? (續)
- reverse index 對於 MAX/MIN操作的影響Index
- 詳解 Flink DataStream中min(),minBy(),max(),max()之間的區別AST
- python奇技淫巧——max/min函式的用法Python函式
- Min-Max 容斥學習筆記筆記
- oracle 效能最佳化Oracle
- CSS max-width和min-widthCSS
- CSS min-height和max-heightCSS
- 【效能最佳化】ORACLE資料庫效能最佳化概述Oracle資料庫
- Oracle SQL效能最佳化OracleSQL
- Oracle sql 效能最佳化OracleSQL
- 【優化】INDEX FULL SCAN (MIN/MAX)訪問路徑優化Index
- Oracle 效能最佳化的基本方法概述Oracle
- Oracle 效能最佳化小結Oracle
- ORACLE效能最佳化筆記Oracle筆記
- oracle大表效能最佳化Oracle
- Oracle效能最佳化之SQL最佳化(轉)OracleSQL
- 一SQL,每隔n個資料,取其中max,min值SQL
- Oracle效能最佳化之應用最佳化(轉)Oracle
- Oracle效能最佳化之最佳化排序操作(轉)Oracle排序
- Oracle SQL效能最佳化常用方法OracleSQL
- Oracle效能最佳化 之 共享池Oracle
- CSS max-width/min-width設定元素尺寸CSS
- laravel mysql聚合函式使用方法(count,sum,max,min,avg)LaravelMySql函式
- ie6實現min-width/max-width
- Python基礎——min/max與np.argmin/np.argmaxPython
- 機率期望進階 + Min-Max容斥 練習題
- CF2019 F. Max Plus Min Plus Size
- Oracle效能最佳化方法論的發展之二:基於OWI的效能最佳化方法論Oracle
- Oracle效能最佳化之提升block的效率(轉)OracleBloC