成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入內核:CBO對于Cost值相同索引的選擇

企業動態

 

[[163836]]

  崔華,網名 dbsnake

  Oracle ACE Director,ACOUG 核心專家

  編輯手記:感謝崔華授權我們獨家轉載其精品文章,也歡迎大家向“Oracle”社區投稿。

  這里我們稍微討論一下CBO對于Cost值相同的索引的選擇,可能會有朋友認為在同樣Cost的情況下,Oracle會按照索引名的字母順序來選擇索引,實際上并不完全是這樣,CBO對于Cost值相同的索引的選擇和Oracle的版本有關。

  原理說明

  MOS上文章“Handling of equally ranked (RBO) or costed (CBO) indexes [ID 73167.1]”明確指出——When the CBO detects 2 indexes that cost the same, it makes the decision based on the following:

  (up to release 9.2.06) indexes ascii name so that index ‘AAA’ would be chosen over index ‘ZZZ’. See Bug 644757

  (starting with 9.2.0.7 and in 10gR1) bigger NDK for fully matched indexes (not for fast full scans). See Bug 2720661

  (in 10gR2 and above) index with lower number of leaf blocks. See Bug 6734618

  這意味著對于Oracle 10gR2及其以上的版本,CBO對于Cost值相同的索引的選擇實際上會這樣:

  1-如果Cost值相同的索引的葉子塊數量不同,則Oracle會選擇葉子塊數量較少的那個索引;

  2-如果Cost值相同的索引的葉子塊數量相同,則Oracle會選擇索引名的字母順序在前面的那個索引。

  測試驗證

  這個非常容易驗證,我們來看一個實例。在一個11.2.0.3的環境中創建一個測試表T1:

  Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0

  Connected as nbs

  SQL> create table t1 as select * from dba_objects;

  Table created

  對T1增加一列object_id_1,并將其值修改成和列object_id的值一致:

  SQL> alter table t1 add (object_id_1 number);

  Table altered

  SQL> update t1 set object_id_1=object_id;

  83293 rows updated

  SQL> commit;

  Commit complete

  分別在列object_id和列object_id_1上創建名為a_idx_t1和b_idx_t1的B樹索引:

  SQL> create index a_idx_t1 on t1(object_id);

  Index created

  SQL> create index b_idx_t1 on t1(object_id_1);

  Index created

  對表T1收集一下統計信息:

  SQL> exec dbms_stats.gather_table_stats(ownname => ‘NBS’, tabname => ‘T1’, estimate_percent => 100, cascade => TRUE, no_invalidate => false);

  PL/SQL procedure successfully completed

  此時索引a_idx_t1和b_idx_t1的統計信息顯然是完全一致的(這意味著走這兩個索引的同類型執行計劃的Cost值會相同),從如下查詢結果中我們可以看到,它們的葉子塊的數量均為185:

  SQL> select index_name,leaf_blocks from dba_indexes where table_owner=’NBS’ and table_name=’T1′;

  INDEX_NAMELEAF_BLOCKS

  —————————— ———–

  A_IDX_T1185

  B_IDX_T1 185

  在當前情形下,如果我們執行目標SQL:

  “select * from t1 where object_id=1000 and object_id_1=1000”

  顯然此時Oracle既可以走索引a_idx_t1,也可以走索引b_idx_t1。

  從如下查詢結果中我們可以看到,此時Oracle選擇了走索引a_idx_t1:

  SQL> set autotrace traceonly explain

 

  SQL> select * from t1 where object_id=1000 and object_id_1=1000;

  這就驗證了我們之前提到的結論——對于Oracle 10gR2及其以上的版本,如果Cost值相同的索引的葉子塊數量相同,則Oracle會選擇索引名的字母順序在前面的那個索引。

  現在我們把索引b_idx_t1的葉子塊數量從之前的185改為現在的184:

  SQL> exec dbms_stats.set_index_stats(ownname => ‘NBS’, indname => ‘B_IDX_T1’, numlblks => 184);

  PL/SQL procedure successfully completed

  從如下查詢結果中我們可以看到,上述改動生效了:

  SQL> select index_name,leaf_blocks from dba_indexes where table_owner=’NBS’ and table_name=’T1′;

  INDEX_NAMELEAF_BLOCKS

  —————————— ———–

  A_IDX_T1185

  B_IDX_T1184

  然后我們再次執行上述目標SQL:

 

  SQL> select * from t1 where object_id=1000 and object_id_1=1000;

  從上述顯示內容中我們可以看到,上述SQL的執行計劃從之前的走對索引a_idx_t1的索引范圍掃描變為了現在的走對索引b_idx_t1的索引范圍掃描,這就驗證了我們之前提到的結論:對于Oracle 10gR2及其以上的版本,如果Cost值相同的索引的葉子塊數量不同,則Oracle會選擇葉子塊數量較少的那個索引。

 

責任編輯:市場部 來源: IT專家網
相關推薦

2021-03-06 22:41:06

內核源碼CAS

2020-11-12 18:08:05

JavaLinux多線程

2009-11-16 10:30:24

Oracle驅動表

2010-07-07 10:21:35

IGRP路由協議

2017-09-04 15:15:48

Linux內核內存屏障

2009-07-02 09:25:15

選擇Hibernate

2010-06-21 13:07:14

2020-09-23 06:53:48

Linux內核架構

2021-05-19 07:56:26

Linux內核搶占

2009-07-06 16:08:00

ASP到JSP

2025-04-28 02:00:00

2025-04-22 08:21:10

2009-12-24 17:06:35

編譯Fedora內核

2021-09-06 17:50:09

內核態操作系統

2025-03-03 03:00:00

2018-09-04 16:20:46

MySQ索引數據結構

2023-11-24 11:24:16

Linux系統

2019-07-08 20:00:35

Linux內核模塊

2020-11-20 07:55:55

Linux內核映射

2010-04-21 13:11:54

Unix內核
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级全黄少妇性色生活免费看 | 欧美高清hd | 日韩有码一区 | 免费一级欧美在线观看视频 | 国产精品成av人在线视午夜片 | 国产亚洲精品久久久久动 | 国产精品a一区二区三区网址 | 欧美不卡视频 | 国产精品久久午夜夜伦鲁鲁 | 欧美日韩一区二区在线观看 | 成人精品视频在线观看 | 天堂一区二区三区四区 | 国产精品a久久久久 | 午夜电影福利 | 黄色一级电影免费观看 | 夜久久 | 亚洲一区二区欧美 | 中文字幕视频一区二区 | 欧美a在线 | 日韩欧美一区二区三区免费观看 | 欧美日韩看片 | 国产观看 | 久草免费在线视频 | 国产成人精品a视频一区www | 国产精品国产三级国产a | 精品国产一区二区三区久久久四川 | 福利精品 | 天堂中文资源在线 | 欧美v片| 夜夜爽99久久国产综合精品女不卡 | 国产成人精品一区二 | 国产伦精品一区二区三区高清 | 美女天堂 | 日本a网站 | 黄色一级电影在线观看 | 亚洲欧洲小视频 | 欧美精品在线一区二区三区 | 成年人网站在线观看视频 | 天天操网 | 99色综合| 一级毛片视频 |