规则如下:

测试如下:

hr@ORCL> drop table t purge;Table dropped.hr@ORCL> create table t as select * from dba_objects;Table created.hr@ORCL> alter table t add (object_id_1 number);Table altered.hr@ORCL> update t set object_id_1=object_id;50363 rows updated.hr@ORCL> commit;Commit complete.hr@ORCL> create index idx_t_a on t(object_id);Index created.hr@ORCL> create index idx_t_b on t(object_id_1);Index created./* 统计信息相同、意味着同类型执行计划的Cost值会相同*/
hr@ORCL> exec dbms_stats.gather_table_stats(ownname=>'HR',tabname=>'T',estimate_percent=>100,cascade=>TRUE,no_invalidate=>false);PL/SQL procedure successfully completed./* 叶子块数量相同、CBO按字母顺序在前走索引*/
hr@ORCL> select index_name,leaf_blocks from user_indexes where table_name='T' and index_name in ('IDX_T_A','IDX_T_B');INDEX_NAME                     LEAF_BLOCKS
------------------------------ -----------
IDX_T_A                                111
IDX_T_B                                111hr@ORCL> set autot trace exp
hr@ORCL> select * from t where object_id=1000 and object_id_1=1000;Execution Plan
----------------------------------------------------------
Plan hash value: 1194865126---------------------------------------------------------------------------------------
| Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |         |     1 |    98 |     2   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS BY INDEX ROWID| T       |     1 |    98 |     2   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IDX_T_A |     1 |       |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------1 - filter("OBJECT_ID_1"=1000)2 - access("OBJECT_ID"=1000)/* 把idx_t_b叶子块数量从111改为110*/
hr@ORCL> set autot off
hr@ORCL> exec dbms_stats.set_index_stats(ownname=>'HR',indname=>'IDX_T_B',numlblks=>110);PL/SQL procedure successfully completed.hr@ORCL> select index_name,leaf_blocks from user_indexes where table_name='T' and index_name in ('IDX_T_A','IDX_T_B');INDEX_NAME                     LEAF_BLOCKS
------------------------------ -----------
IDX_T_A                                111
IDX_T_B                                110/* Cost 值相同、CBO  选择叶子块数量较少的索引*/
hr@ORCL> set autot trace exp
hr@ORCL> select * from t where object_id=1000 and object_id_1=1000;Execution Plan
----------------------------------------------------------
Plan hash value: 3073359464---------------------------------------------------------------------------------------
| Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |         |     1 |    98 |     2   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS BY INDEX ROWID| T       |     1 |    98 |     2   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IDX_T_B |     1 |       |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------1 - filter("OBJECT_ID"=1000)2 - access("OBJECT_ID_1"=1000)

                    By David Lin 
                    20113-06-05 
                    Good Luck

深入理解Oracle索引(17):Cost 值相同 CBO 对索引的选择相关推荐

  1. Oracle数据库解决NULL值不走B树索引

    B树索引我们可以把它看成是书的目录,在这个目录中主要记录的是索引所对应的表列的值和这个值所对应的ROWID.在通常情况下,我们在表中增加索引的目的是增加表的查询性能,但是有几种情况,即使你在表中加入了 ...

  2. 杨桃的Python进阶讲座16——数组array(六)一维数组和二维数组的索引和取值(配详细图解)

    本人CSDN博客专栏:https://blog.csdn.net/yty_7 Github地址:https://github.com/yot777/ 在进阶讲座8中讲过数组(矩阵)的维度,我们再看看多 ...

  3. mongodb 索引去重_PostgreSQL13新特性解读Btree索引去重Deduplication

    背景 PostgreSQL13.0于2020年9月24日正式release,13版本的PG带来很多优秀特性:比如索引的并行vacuum,增量排序,btree索引deduplication,异构分区表逻 ...

  4. 在mysql中unique唯一索引的作用_MySQL_MySQL中的唯一索引的简单学习教程,mysql 唯一索引UNIQUE一般用于不 - phpStudy...

    MySQL中的唯一索引的简单学习教程 mysql 唯一索引UNIQUE一般用于不重复数据字段了我们经常会在数据表中的id设置为唯一索引UNIQUE,下面我来介绍如何在mysql中使用唯一索引UNIQU ...

  5. oracle数据库中索值,Oracle数据库中的索引详解

    Oracle数据库中的索引详解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一 ROWID的概念 存储了row在数据文 ...

  6. oracle索引分类与区分,深入理解Oracle表(6):堆组织表(HOT)和索引组织表(IOT)的区别...

    摘要: 堆表:又称堆组织表,常用的表类型,以堆的方式管理,当增加数据时,将使用段中第一个适合数据大小的空闲空间.当删除数据时,留下的空间允许以后的DML操作重用. 堆组织表(heap table) 应 ...

  7. Oracle技术之索引与Null值对于Hints及执行计划的影响

    由于B*Tree索引不存储Null值,所以在索引字段允许为空的情况下,某些Oracle查询不会使用索引. 很多时候,我们看似可以使用全索引扫描(Full Index Scan)的情况,可能Oracle ...

  8. oracle执行计划cost单位,Oracle 执行计划(5)—cost成本之索引范围扫描-B树索引

    Oracle 执行计划(5)-cost成本之索引范围扫描-B树索引 SQL>  select * from t1 where a<600 ; 已选择599行. 已用时间:  00: 00: ...

  9. 深入理解Oracle的并行操作

    并行(Parallel)和OLAP系统  并行的实现机制是:首先,Oracle会创建一个进程用于协调并行服务进程之间的信息传递,这个协调进程将需要操作的数据集(比如表的数据块)分割成很多部分,称为并行 ...

最新文章

  1. 使用PL/SQL Developer远程连接到oracle11g
  2. 04_resultMap配置
  3. 《JavaScript忍者秘籍》——导读
  4. PostgreSQL数据类型-枚举类型、几何类型、网络地址类型和其他数据类型
  5. Python eval 与 exec 函数 - Python零基础入门教程
  6. linux scp 输入密码,Linux scp远程复制数据不需要输入密码
  7. JS校验身份证号码格式
  8. opencv (二十六)图像直方图匹配
  9. 自动升级系统的设计与实现(源码)
  10. 【微积分】2.1一元函数微分
  11. 磁共振线圈分类_MRI技师必须知道的磁共振软硬件知识
  12. Windows安装 choco
  13. C#练习题答案: 字母战争 - 核打击【难度:3级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
  14. Altium Designer 20 (6)——二极管以及光耦元件创建
  15. 《团》里男人是否可嫁的汉?
  16. 2022年第6周(1月31日-2月6日)中国各地区电影票房排行榜:江苏票房夺冠,河南票房环比增幅最大(附热榜TOP31详单)
  17. c语言编写邮箱注册登录的程序,c语言实现邮箱地址验证
  18. i386 、x86_64 、ppc是指
  19. 【JAVA今法修真】 第二章 一气化三清 线程分心念
  20. 【合集】Jerry Wang 2018~2021 四年期间的 SAP 技术文章合集

热门文章

  1. winxp计算机远程桌面连接,winxp系统远程桌面不能连接指定计算机的解决方法
  2. arm 服务器优势,零的突破 戴尔正式宣布基于ARM架构服务器
  3. java简单单向链表_用java简单的实现单链表的基本操作
  4. transform 的副作用
  5. o00o0o php,PHP $O00OO0=urldecode eval 解密,记一次商业源码的去后门
  6. java 支付宝转账_Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝订单退款)...
  7. 属性数量限制android,Android开发笔记 今天学到的一些属性
  8. mysql读出来的日期后面多了个 .0处理及layui中日期控件点击一闪而过处理
  9. sqlserver中分组按逗号连接
  10. rk3288 android5.1 java 层使用 su 获取 root 权限