ITPub博客

首页 > 数据库 > Oracle > 组合索引的选择原则

组合索引的选择原则

原创 Oracle 作者:flzhang 时间:2017-07-13 10:06:46 0 删除 编辑

表上的索引是根据什么建立的,特别是组合索引,有多个的时候优化器又怎么选择使用哪个呢,
今天做个试验验证下
新建这个表testindex
表结构
Name       Type          Nullable Default Comments
---------- ------------- -------- ------- --------
CREATETIME DATE          Y                        
LOC        VARCHAR2(100) Y                        
STATUS     VARCHAR2(20)  Y                        
COL1       VARCHAR2(10)  Y                        

testindex上只有两个索引
right1 loc,createtime,status
right2 createtime,loc,status

收集表统计信息
BEGIN
   DBMS_STATS.GATHER_TABLE_STATS(ownname => 'TEST',
                                 tabname => 'TESTINDEX',
                                 estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
                                 method_opt => 'for all columns size skewonly',
                                 cascade=>TRUE
                                 );
END;
收集统计信息可参考
http://blog.csdn.net/robinson1988/article/details/5329522

根据条件取值范围不同执行sql
Select *
From testindex
Where CREATETIME = :1
And  loc > :3
And  status =:4
走createtime,loc,status索引

Select *
From testindex
Where CREATETIME > :1
And  loc = :3
And  status =:4
走loc,createtime,status索引

说明选择组合索引时根据查询条件判断,取值越精准,范围越小的字段createtime/loc放前面的索引越优先被选择
这里收集统计信息还是很必要的,上面这个选择索引的规则和直方图,是否有其他索引关系应该不大


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/750077/viewspace-2141998/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 有用教程收藏
请登录后发表评论 登录
全部评论

注册时间:2014-03-26

  • 博文量
    97
  • 访问量
    773868