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/29863023/viewspace-1840509/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 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 容斥
- oracle 效能優化Oracle優化
- Oracle效能優化Oracle優化
- 【效能優化】ORACLE資料庫效能優化概述優化Oracle資料庫
- min ? max ? 執行計劃?
- python的小技巧之min,maxPython
- Oracle SQL效能優化OracleSQL優化
- oracle 效能優化(一)Oracle優化
- Oracle效能優化-SQL優化(案例一)Oracle優化SQL
- Oracle效能優化-SQL優化(案例二)Oracle優化SQL
- Oracle效能優化-SQL優化(案例三)Oracle優化SQL
- Oracle效能優化-SQL優化(案例四)Oracle優化SQL
- 【最佳化】INDEX FULL SCAN (MIN/MAX)訪問路徑Index
- php-fpm優化方法 pm.min_spare_servers、pm.max_spare_servers 的真實意義PHP優化Server
- min ? max ? 執行計劃? (續)
- Oracle 效能優化小結Oracle優化
- oracle效能優化之--hintsOracle優化
- Oracle效能優化FAQ (zt)Oracle優化
- ORACLE效能優化筆記Oracle優化筆記
- Oracle 效能優化-expdp備份速度優化02Oracle優化
- Oracle 效能優化-expdp備份速度優化03Oracle優化
- oracle效能優化二——作業系統優化Oracle優化作業系統
- reverse index 對於 MAX/MIN操作的影響Index
- Android效能優化——列表類控制元件卡頓優化Android優化控制元件
- 詳解 Flink DataStream中min(),minBy(),max(),max()之間的區別AST
- 【效能優化】Oracle 效能優化:行比例偏差大 建立柱狀圖優化Oracle
- Oracle效能優化視訊學習筆記-效能優化概念(一)Oracle優化筆記
- Oracle效能優化視訊學習筆記-效能優化概念(二)Oracle優化筆記
- Oracle Freelist和HWM的效能優化Oracle優化
- Oracle效能優化--Latch介紹Oracle優化
- Oracle效能優化---鎖介紹Oracle優化
- ORACLE SQL效能優化系列 (一)OracleSQL優化
- Oracle資料庫效能優化Oracle資料庫優化