【問題處理】同樣的並行表,同樣的索引結構,不同的執行計劃
------ 能用到索引:
SQL > select count(*) from dt_bar64;
COUNT(*)
----------
223413
SQL > explain plan for select * from dt_bar64 t where t.taskid = 3651 and t.trnn='000087';
Explained.
select * from table(dbms_xplan.display());
SQL >
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------
Plan hash value: 3845150141
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 113 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| DT_BAR64 | 1 | 113 | 4 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | PK_DT_BAR64 | 1 | | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("T"."TASKID"=3651 AND "T"."TRNN"='000087')
14 rows selected.
------ 不能用到索引:
SQL > select count(*) from dt_bar65;
COUNT(*)
----------
234088
SQL > explain plan for select * from dt_bar65 t where t.taskid = 3651 and t.trnn='000087';
Explained.
SQL > select * from table(dbms_xplan.display());
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2601456579
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 65 | 3 (0)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 1 | 65 | 3 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 1 | 65 | 3 (0)| 00:00:01 | Q1,00 | PCWC | |
|* 4 | TABLE ACCESS FULL| DT_BAR65 | 1 | 65 | 3 (0)| 00:00:01 | Q1,00 | PCWP | |
--------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter("T"."TASKID"=3651 AND "T"."TRNN"='000087')
16 rows selected.
兩個表都是並行度為300的表,同時在在兩張表上建立相同的聯合索引,索引的欄位都是(TASKID,TRNN)
問題:
1.並行的表是怎樣影響執行計劃的?
2.請解釋一下PX COORDINATOR,我查到資料是表示並行查詢的執行計劃會包含這個內容,但是另外一個用到索引的就不好解釋了
3.在使用強制索引後執行計劃顯示是可以使用到索引的,select /*+ index (t,PK_DT_BAR65) */ * from dt_bar65 t where t.taskid = 3651 and t.trnn='000087';,這兩種執行效果哪個更高效一些?
SQL > select count(*) from dt_bar64;
COUNT(*)
----------
223413
SQL > explain plan for select * from dt_bar64 t where t.taskid = 3651 and t.trnn='000087';
Explained.
select * from table(dbms_xplan.display());
SQL >
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------
Plan hash value: 3845150141
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 113 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| DT_BAR64 | 1 | 113 | 4 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | PK_DT_BAR64 | 1 | | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("T"."TASKID"=3651 AND "T"."TRNN"='000087')
14 rows selected.
------ 不能用到索引:
SQL > select count(*) from dt_bar65;
COUNT(*)
----------
234088
SQL > explain plan for select * from dt_bar65 t where t.taskid = 3651 and t.trnn='000087';
Explained.
SQL > select * from table(dbms_xplan.display());
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2601456579
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 65 | 3 (0)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 1 | 65 | 3 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 1 | 65 | 3 (0)| 00:00:01 | Q1,00 | PCWC | |
|* 4 | TABLE ACCESS FULL| DT_BAR65 | 1 | 65 | 3 (0)| 00:00:01 | Q1,00 | PCWP | |
--------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter("T"."TASKID"=3651 AND "T"."TRNN"='000087')
16 rows selected.
兩個表都是並行度為300的表,同時在在兩張表上建立相同的聯合索引,索引的欄位都是(TASKID,TRNN)
問題:
1.並行的表是怎樣影響執行計劃的?
2.請解釋一下PX COORDINATOR,我查到資料是表示並行查詢的執行計劃會包含這個內容,但是另外一個用到索引的就不好解釋了
3.在使用強制索引後執行計劃顯示是可以使用到索引的,select /*+ index (t,PK_DT_BAR65) */ * from dt_bar65 t where t.taskid = 3651 and t.trnn='000087';,這兩種執行效果哪個更高效一些?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-555652/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 不同使用者同樣環境同樣的SQL執行計劃不共享問題(AUTH_CHECK_MISMATCH)SQL
- 同樣SQL同樣執行計劃在不同節點執行時間差很遠SQL
- 同樣的sql執行結果不同的原因分析SQL
- ORACLE&MYSQL同樣的記錄值進行編號處理OracleMySql
- 怎樣看懂Oracle的執行計劃Oracle
- 執行時間在1秒以下的SQL同樣也會引發效能問題SQL
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 怎樣得到準確的執行計劃
- 怎樣看懂Oracle的執行計劃[轉]Oracle
- 執行計劃變化的處理
- 分割槽表與堆表執行計劃的不同
- 執行計劃問題導致處理速度時快時慢的問題
- Oracle訪問索引的執行計劃(一)Oracle索引
- Oracle訪問索引的執行計劃(二)Oracle索引
- Oracle訪問索引的執行計劃(三)Oracle索引
- Oracle訪問索引的執行計劃(四)Oracle索引
- Oracle訪問索引的執行計劃(五)Oracle索引
- Oracle訪問表的執行計劃Oracle
- 處理表的行遷移的問題
- 這樣的執行問題請教高手
- mysql的執行計劃快取問題MySql快取
- [20171225]檢視並行執行計劃注意的問題.txt並行
- 同樣的工作、同樣的做需求,為什麼他們能進阿里阿里
- 為啥同樣的邏輯在不同前端框架中效果不同前端框架
- 同樣網路結構,不一樣的推理速度?--記一次奇怪的踩坑
- 執行計劃的偏差導致的效能問題
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- 同樣的故事,只是時間地點任務有些不同
- mysql 同時插入幾行不同的資料 。MySql
- 建立索引調整sql的執行計劃索引SQL
- 關於索引的執行計劃記載索引
- sqm執行計劃的繫結
- 越南的遊戲市場同樣遭遇了嚴重的“盜版問題”遊戲
- 同樣是程式設計師 為什麼薪資不同程式設計師
- 同樣 3 年前端程式設計師,為什麼結局截然不同?前端程式設計師
- SQL執行計劃異常引起的效能問題SQL
- SQL執行計劃異常 引起的效能問題SQL
- 一個執行計劃解析的小問題分析