日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

查看oracle自动优化,使用索引查询更快,优化器为何不能自动识别

發布時間:2023/12/2 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 查看oracle自动优化,使用索引查询更快,优化器为何不能自动识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本帖最后由 〇〇 于 2015-12-24 12:17 編輯

有如下查詢,不加hint時,優化器自己選擇的執行計劃是走全表掃描,花費時間很長,

但加hint強制讓大表走skip index時間很短,根據傳統的理解,引導列上重復出現的值越少

走skip index的可能越大.但本查詢中引導列的重復值也不多,且強制使用skip index后花費的時間

明顯減少,在不加hint時,優化器為什么不能自己判斷出走skip index后更快的執行計劃呢?

哪位大俠能給個skipindex cost計算的公式?謝謝

本查詢結構是一個有30條數據的小表,和一個4百萬數據的大表關聯,大表上有主鍵索引

主鍵索引中有兩列 如(YMD,SERL_NO),YMD列就是前導列。具體查詢和執行計劃如下

1使用索引時

SQL_ID??4nr6cv01fxb4s, child number 0

-------------------------------------

SELECT /*+ INDEX_SS(T1 PK_RW_BI_FT_LT) */

T2.SERL_NO

,T1.SI_YMD

,T1.ST_YMD

,T1.ST2_YMD

,T1.SO_YMD

,T1.ACTU_DT

FROM MCS_HQ_READ.RW_BI_FT_LT_BAK T1

,MCS_HQ_READ.UP_LOAD_SERL10 T2

WHERE T1.SERL_NO = T2.SERL_NO

Plan hash value: 2981316369

----------------------------------------------------------------------------------------------------------

| Id??| Operation? ?? ?? ?? ?? ?? ???| Name? ?? ?? ?? ?| Starts | E-Rows | A-Rows |? ?A-Time? ?| Buffers |

----------------------------------------------------------------------------------------------------------

|? ?0 | SELECT STATEMENT? ?? ?? ?? ? |? ?? ?? ?? ?? ???|? ?? ?1 |? ?? ???|? ???29 |00:00:00.03 |? ? 6060 |

|? ?1 |??NESTED LOOPS? ?? ?? ?? ?? ? |? ?? ?? ?? ?? ???|? ?? ?1 |? ???10 |? ???29 |00:00:00.03 |? ? 6060 |

|? ?2 |? ?TABLE ACCESS FULL? ?? ?? ? | UP_LOAD_SERL10??|? ?? ?1 |? ???29 |? ???29 |00:00:00.01 |? ?? ? 2 |

|? ?3 |? ?TABLE ACCESS BY INDEX ROWID| RW_BI_FT_LT_BAK |? ???29 |? ?? ?1 |? ???29 |00:00:00.03 |? ? 6058 |

|*??4 |? ? INDEX SKIP SCAN? ?? ?? ???| PK_RW_BI_FT_LT??|? ???29 |? ?? ?1 |? ???29 |00:00:00.03 |? ? 6032 |

----------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

4 - access("T1"."SERL_NO"="T2"."SERL_NO")

filter("T1"."SERL_NO"="T2"."SERL_NO")

2全表掃描時

SQL_ID??c3shr653mx487, child number 0

-------------------------------------

SELECT? ?? ???T2.SERL_NO

,T1.SI_YMD

,T1.ST_YMD

,T1.ST2_YMD

,T1.SO_YMD

,T1.ACTU_DT

FROM MCS_HQ_READ.RW_BI_FT_LT_BAK T1

,MCS_HQ_READ.UP_LOAD_SERL10 T2

WHERE T1.SERL_NO = T2.SERL_NO

Plan hash value: 1553165350

---------------------------------------------------------------------------------------------------------

| Id??| Operation? ?? ?? ? | Name? ?? ?? ?? ?| Starts | E-Rows | A-Rows |? ?A-Time? ?| Buffers | Reads??|

---------------------------------------------------------------------------------------------------------

|? ?0 | SELECT STATEMENT? ?|? ?? ?? ?? ?? ???|? ?? ?1 |? ?? ???|? ???29 |00:00:06.16 |? ???105K|? ? 105K|

|*??1 |??HASH JOIN? ?? ?? ?|? ?? ?? ?? ?? ???|? ?? ?1 |? ???10 |? ???29 |00:00:06.16 |? ???105K|? ? 105K|

|? ?2 |? ?TABLE ACCESS FULL| UP_LOAD_SERL10??|? ?? ?1 |? ???29 |? ???29 |00:00:00.01 |? ?? ? 2 |? ?? ?0 |

|? ?3 |? ?TABLE ACCESS FULL| RW_BI_FT_LT_BAK |? ?? ?1 |? ?1379K|? ?3999K|00:00:03.96 |? ???105K|? ? 105K|

---------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - access("T1"."SERL_NO"="T2"."SERL_NO")

具體統計信息參考

索引統計

INDEX_NAME? ?? ???INDEX_TYPE? ?? ???BLEVEL? ?? ???LEAF_BLOCKS? ?? ???DISTINCT_KEYS? ?? ???AVG_LEAF_BLOCKS_PER_KEY? ?? ???AVG_DATA_BLOCKS_PER_KEY? ?? ???CLUSTERING_FACTOR? ?? ???NUM_ROWS

PK_RW_BI_FT_LT? ?? ???NORMAL? ?? ???2? ?? ???24675? ?? ???3879361? ?? ???1? ?? ???1? ?? ???3819111? ?? ???3879361

表統計

TABLE_NAME? ?? ???NUM_ROWS? ?? ???BLOCKS? ?? ???EMPTY_BLOCKS? ?? ???AVG_SPACE? ?? ???CHAIN_CNT? ?? ???AVG_ROW_LEN? ?? ???SAMPLE_SIZE? ?? ???PARTITIONED

RW_BI_FT_LT_BAK? ?? ???3999999? ?? ???105977? ?? ???0? ?? ???0? ?? ???0? ?? ???190? ?? ???3999999? ?? ???NO

前導列YMD統計

COLUMN_NAME? ?? ???NUM_DISTINCT? ?? ???LOW_VALUE? ?? ???HIGH_VALUE? ?? ???DENSITY? ?? ???NUM_NULLS? ?? ???NUM_BUCKETS? ?? ???SAMPLE_SIZE? ?? ???HISTOGRAM? ?? ???AVG_COL_LEN

YMD? ?? ???61? ?? ?? ?3230313431313030? ?? ?? ?3230313431323330? ?? ?? ?0.016393443? ?? ???0? ?? ???1? ?? ???3999999? ?? ???NONE? ?? ???9

總結

以上是生活随笔為你收集整理的查看oracle自动优化,使用索引查询更快,优化器为何不能自动识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。