组合索引的选择原则

简介: 表上的索引是根据什么建立的,特别是组合索引,有多个的时候优化器又怎么选择使用哪个呢, 今天做个试验验证下 新建这个表testindex 表结构 Name       Type          Nullable Default Comments --...

表上的索引是根据什么建立的,特别是组合索引,有多个的时候优化器又怎么选择使用哪个呢,
今天做个试验验证下
新建这个表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放前面的索引越优先被选择
这里收集统计信息还是很必要的,上面这个选择索引的规则和直方图,是否有其他索引关系应该不大


目录
相关文章
|
2月前
|
数据库 索引
联合索引和单独列索引哪个更好
【10月更文挑战第15天】联合索引和单独列索引哪个更好
54 2
|
4月前
|
容器
OOP 中的组合、聚合和关联
【8月更文挑战第22天】
46 0
|
6月前
|
Java 关系型数据库 MySQL
第八章,索引的创建与设计原则(4)
第八章,索引的创建与设计原则
34 0
|
6月前
|
存储 关系型数据库 MySQL
第八章,索引的创建与设计原则(2)
第八章,索引的创建与设计原则
25 0
|
存储 关系型数据库 MySQL
Mysql索引建立原则
索引建立原则。
62 0
|
7月前
|
SQL C++
组合两个表(C++)
组合两个表(C++)
34 0
|
存储 程序员 C语言
c++ 如何做出实现一组数据的实际索引
c++ 如何做出实现一组数据的实际索引
|
Oracle 关系型数据库 索引
唯一约束和唯一索引区别
唯一约束和唯一索引区别
918 0
|
SQL 存储 关系型数据库
第8章_索引的创建与设计原则(上)
第8章_索引的创建与设计原则
72 0
|
存储 SQL 关系型数据库
第8章_索引的创建与设计原则(下)
第8章_索引的创建与设计原则
149 0