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

深入內(nèi)核:CBO對(duì)于Cost值相同索引的選擇

企業(yè)動(dòng)態(tài)

 

[[163836]]

  崔華,網(wǎng)名 dbsnake

  Oracle ACE Director,ACOUG 核心專家

  編輯手記:感謝崔華授權(quán)我們獨(dú)家轉(zhuǎn)載其精品文章,也歡迎大家向“Oracle”社區(qū)投稿。

  這里我們稍微討論一下CBO對(duì)于Cost值相同的索引的選擇,可能會(huì)有朋友認(rèn)為在同樣Cost的情況下,Oracle會(huì)按照索引名的字母順序來(lái)選擇索引,實(shí)際上并不完全是這樣,CBO對(duì)于Cost值相同的索引的選擇和Oracle的版本有關(guān)。

  原理說(shuō)明

  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

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

  1-如果Cost值相同的索引的葉子塊數(shù)量不同,則Oracle會(huì)選擇葉子塊數(shù)量較少的那個(gè)索引;

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

  測(cè)試驗(yàn)證

  這個(gè)非常容易驗(yàn)證,我們來(lái)看一個(gè)實(shí)例。在一個(gè)11.2.0.3的環(huán)境中創(chuàng)建一個(gè)測(cè)試表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

  對(duì)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上創(chuàng)建名為a_idx_t1和b_idx_t1的B樹(shù)索引:

  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

  對(duì)表T1收集一下統(tǒng)計(jì)信息:

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

  PL/SQL procedure successfully completed

  此時(shí)索引a_idx_t1和b_idx_t1的統(tǒng)計(jì)信息顯然是完全一致的(這意味著走這兩個(gè)索引的同類型執(zhí)行計(jì)劃的Cost值會(huì)相同),從如下查詢結(jié)果中我們可以看到,它們的葉子塊的數(shù)量均為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

  在當(dāng)前情形下,如果我們執(zhí)行目標(biāo)SQL:

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

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

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

  SQL> set autotrace traceonly explain

 

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

  這就驗(yàn)證了我們之前提到的結(jié)論——對(duì)于Oracle 10gR2及其以上的版本,如果Cost值相同的索引的葉子塊數(shù)量相同,則Oracle會(huì)選擇索引名的字母順序在前面的那個(gè)索引。

  現(xiàn)在我們把索引b_idx_t1的葉子塊數(shù)量從之前的185改為現(xiàn)在的184:

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

  PL/SQL procedure successfully completed

  從如下查詢結(jié)果中我們可以看到,上述改動(dòng)生效了:

  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

  然后我們?cè)俅螆?zhí)行上述目標(biāo)SQL:

 

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

  從上述顯示內(nèi)容中我們可以看到,上述SQL的執(zhí)行計(jì)劃從之前的走對(duì)索引a_idx_t1的索引范圍掃描變?yōu)榱爽F(xiàn)在的走對(duì)索引b_idx_t1的索引范圍掃描,這就驗(yàn)證了我們之前提到的結(jié)論:對(duì)于Oracle 10gR2及其以上的版本,如果Cost值相同的索引的葉子塊數(shù)量不同,則Oracle會(huì)選擇葉子塊數(shù)量較少的那個(gè)索引。

 

責(zé)任編輯:市場(chǎng)部 來(lái)源: IT專家網(wǎng)
相關(guān)推薦

2021-03-06 22:41:06

內(nèi)核源碼CAS

2020-11-12 18:08:05

JavaLinux多線程

2009-11-16 10:30:24

Oracle驅(qū)動(dòng)表

2010-07-07 10:21:35

IGRP路由協(xié)議

2017-09-04 15:15:48

Linux內(nèi)核內(nèi)存屏障

2009-07-02 09:25:15

選擇Hibernate

2010-06-21 13:07:14

2020-09-23 06:53:48

Linux內(nèi)核架構(gòu)

2021-05-19 07:56:26

Linux內(nèi)核搶占

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內(nèi)核

2021-09-06 17:50:09

內(nèi)核態(tài)操作系統(tǒng)

2025-03-03 03:00:00

2018-09-04 16:20:46

MySQ索引數(shù)據(jù)結(jié)構(gòu)

2023-11-24 11:24:16

Linux系統(tǒng)

2020-11-20 07:55:55

Linux內(nèi)核映射

2019-07-08 20:00:35

Linux內(nèi)核模塊

2023-01-10 08:50:10

OracleCBO優(yōu)化器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品久久久久久久久久 | 久热精品免费 | 男人天堂色 | 久久久久久国产精品mv | 欧美精品一区二区免费 | 国产精品一区在线观看 | 精品久久99 | www.国产一区 | 成人在线观看欧美 | 视频国产一区 | 18性欧美 | 日韩在线看片 | 国产精品高清一区二区三区 | 成人免费影院 | 免费在线成人 | 国产视频久久久 | 亚洲欧美国产精品久久 | 三级视频在线观看 | 成人av网站在线观看 | 青青草这里只有精品 | 精品久久久久久久久久久久久久久久久 | 国产一区二区三区四区在线观看 | 国产成人在线一区 | 国产在线中文字幕 | 国产日韩欧美另类 | 免费簧片视频 | 欧美大片黄| 激情麻豆视频 | 9999国产精品欧美久久久久久 | www国产成人免费观看视频 | 天天夜干| 久草免费在线 | 成年视频在线观看福利资源 | 色av一区二区三区 | 国产精品久久久久无码av | 99久久99热这里只有精品 | 欧美日韩一区二区三区不卡视频 | 91高清视频在线观看 | 成人午夜视频在线观看 | 欧美日韩中 | 一区二区国产在线观看 |