【SQL 優化】異常的邏輯讀
實驗環境
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
SQL> create table t as select * from all_objects where 1=0;
表已建立。
SQL> set timing on;
SQL> insert into t select * from all_objects ;
已建立67670行。
已用時間: 00: 00: 21.00
SQL> commit;
提交完成。
已用時間: 00: 00: 00.00
SQL> insert into t select * from all_objects ;
已建立67670行。
已用時間: 00: 00: 13.53
SQL> commit;
提交完成。
已用時間: 00: 00: 00.00
SQL> insert into t select * from all_objects ;
已建立67670行。
已用時間: 00: 00: 13.68
SQL> commit;
提交完成。
已用時間: 00: 00: 00.00
SQL> begin
2 dbms_stats.gather_table_stats(user,'T');--資訊統計
3 end;
4 /
PL/SQL 過程已成功完成。
已用時間: 00: 00: 03.07
SQL> set autotrace on
SQL> set linesize 120
SQL> set autot traceonly stat
SQL> select owner,object_name,object_id, count(*)
2 from t group by owner ,object_name,object_id;
已選擇67670行。
已用時間: 00: 00: 01.76
統計資訊
---------------------------------
0 recursive calls
0 db block gets
2979 consistent gets ----全表掃描時的邏輯讀
792 physical reads
0 redo size
2964477 bytes sent via SQL*Net to client
50037 bytes received via SQL*Net from client
4513 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
67670 rows processed
SQL> create index idx_t on t (owner,object_name,object_id);--建立索引
索引已建立。
已用時間: 00: 00: 01.43
SQL> begin
2 dbms_stats.gather_table_stats(user,'T',cascade => true);--資訊統計
3 end;
4 /
PL/SQL 過程已成功完成。
已用時間: 00: 00: 03.46
SQL> set autot traceonly
SQL> select owner,object_name,object_id, count(*)
2 from t group by owner ,object_name,object_id;
已選擇67670行。
已用時間: 00: 00: 01.62
執行計劃
----------------------------------------------------------
Plan hash value: 3184476542
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 67670 | 2379K| 1310 (1)| 00:00:16 |
| 1 | SORT GROUP BY NOSORT| | 67670 | 2379K| 1310 (1)| 00:00:16 |
| 2 | INDEX FULL SCAN | IDX_T | 203K| 7137K| 1310 (1)| 00:00:16 |
------------------------------------------------------------------------------
統計資訊
----------------------------------------------------------
0 recursive calls
0 db block gets
5795 consistent gets---幾乎是FTS 的兩倍的邏輯讀。
0 physical reads
0 redo size
2866263 bytes sent via SQL*Net to client
50037 bytes received via SQL*Net from client
4513 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
67670 rows processed
已用時間: 00: 00: 00.06
做一個10053 事件看看
***************************************
BASE STATISTICAL INFORMATION
***********************
Table Stats::
Table: T Alias: T
#Rows: 203010 #Blks: 2973 AvgRowLen: 101.00
Index Stats::
Index: IDX_T Col#: 1 2 4
LVLS: 2 #LB: 1306 #DK: 67670 LB/K: 1.00 DB/K: 3.00 CLUF: 203010.00
Access path analysis for T --路徑選擇
***************************************
SINGLE TABLE ACCESS PATH
Single Table Cardinality Estimation for T[T]
Table: T Alias: T
Card: Original: 203010.000000 Rounded: 203010 Computed: 203010.00 Non Adjusted: 203010.00
Access Path: TableScan
Cost: 809.88 Resp: 809.88 Degree: 0
Cost_io: 807.00 Cost_cpu: 63804141
Resp_io: 807.00 Resp_cpu: 63804141
Access Path: index (index (FFS))
Index: IDX_T
resc_io: 355.00 resc_cpu: 33661801
ix_sel: 0.000000 ix_sel_with_filters: 1.000000
Access Path: index (FFS)
Cost: 356.52 Resp: 356.52 Degree: 1
Cost_io: 355.00 Cost_cpu: 33661801
Resp_io: 355.00 Resp_cpu: 33661801
Access Path: index (FullScan)
Index: IDX_T
resc_io: 1308.00 resc_cpu: 49916844
ix_sel: 1.000000 ix_sel_with_filters: 1.000000
Cost: 1310.25 Resp: 1310.25 Degree: 1
Best:: AccessPath: IndexFFS --最佳路徑
Index: IDX_T
Cost: 356.52 Degree: 1 Resp: 356.52 Card: 203010.00 Bytes: 0
但是從執行計劃的結果上看,走索引卻耗費更多的邏輯讀!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-676273/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql優化之邏輯優化SQL優化
- sql生成可讀性邏輯圖SQL
- Hystrix降級邏輯中如何獲取觸發的異常
- MySQL調優篇 | 邏輯架構解讀(1)MySql架構
- oracle邏輯讀過程Oracle
- 邏輯漏洞的常見驗證手法
- 登入邏輯中的驗證碼顯示策略優化優化
- JavaScript(ES6)邏輯判斷條件優化JavaScript優化
- 以下屬於常⽤邏輯電平的有( )
- 不要把異常當做業務邏輯,這效能可能你無法承受
- 《底層邏輯》讀後感
- 常見邏輯語句逆向分析
- JVM優化過頭了,直接把異常資訊優化沒了?JVM優化
- 跑批SQL效能異常分析SQL
- [20231124]奇怪的高邏輯讀4.txt
- [20230216]奇怪的高邏輯讀3.txt
- 如何優雅的處理異常
- 在SpringBoot中使用logback優化異常堆疊的輸出Spring Boot優化
- SAP Spartacus BrowserPlatformLocation的初始化邏輯Platform
- SAP UI5 BarcodeScannerButton 的初始化邏輯 - Cordova API 檢測等邏輯UIAPI
- SQL Server 異常程式碼處理SQLServer
- 小程式分包的一些思考及Uiniapp 分包優化邏輯的驗證UIAPP優化
- 如何優雅的設計Java異常Java
- 使用libtorch訓練一個異或邏輯閘
- HashMap中ConcurrentModificationException異常解讀HashMapException
- 在Oracle中,什麼是物理讀和邏輯讀?Oracle
- 記錄一個利用資料庫引擎格式化異常sql的思路資料庫SQL
- SQL優化的方法論SQL優化
- 邏輯迴歸:使用Python的簡化方法邏輯迴歸Python
- 資料庫優化 - SQL優化資料庫優化SQL
- 攔截線上 sql 異常報錯SQL
- 約翰•麥卡錫——不走尋常路的常識邏輯學家
- 遊戲機制設計:生活邏輯轉化為遊戲邏輯的設計形式遊戲
- SQL SERVER優化SQLServer優化
- SQL優化指南SQL優化
- Egg優雅的實現異常處理
- SpringBoot優雅的全域性異常處理Spring Boot
- [譯]Go如何優雅的處理異常Go
- 適當調大arraysize減少邏輯讀