索引的可选择性

索引的“可选择性”是指在该索引列里存储不同值的数目和记录数的比。比如某个表的记录数是

1000条,而该表的索引列的值只有900个不同的值(有100个是相同或是空)。这样索引的可选
择性为900/1000为0.9 。这样当然效果就不好,最好的索引可选择性(如主键索引)是1.0 。索
引的可选择性是衡量索引的利用率的方法,比如在极端的情况下,一个表记录数是1000,而
索引列的值只有5个不同的值,则索引的可选择性很差(只有0.005)。这样的情形使用全表扫
描要比采用索引还好。
测量索引的可选择性
方法1:
可以采用命令方式来测量某个索引的可选择性值,例如COMPAY表的city 列和state列是被建立
成索引,则:
COMPAY 表的city和state 列的不同值的数目为:

Select count( distinct ||%||state) from COMPAY;
用下面语句查出COMPAY表的记录数:
select count(*) from COMPAY;

按照前面的方法进行比可得到该索引的可选择性值。
方法2:
用analyze 对表进行统计,对表进行分析后,系统同样对索引进行了分析。在查询结果。

ANALYZE TABLE compay compute statistics;

一旦表及其索引被分析过,就可以查询USER_INDEXES数据字典中的数据:
查询不同索引的列值:

select distinct_keys from user_indexes where table_name=’COMPAY’;

查询表中的记录数:

select num_rows from user_tables where table_name =’COMPAY’;

索引可选择性= distinct_keys / num_rows

发表评论

电子邮件地址不会被公开。