select count(distinct 第一列||''%''||第二列)/count(*)
from 表名
/
如果我们知道其中一列索引的选择性(例如其中一列是主键),那么我们就可以知道另一列索引的选择性。
手工方法的优点是在创建索引前就能评估索引的选择性。
(2)自动测量索引的选择性
如果分析一个表,也会自动分析所有表的索引。
第一,为了确定一个表的确定性,就要分析表。
analyze table 表名
compute statistics
/
第二,确定索引里不同关键字的数目:
select distinct_keys
from user_indexes
where table_name=''表名''
and index_name=''索引名''
/
第三,确定表中行的总数:
select num_rows
from user_tables
where table_name=''表名''
/
第四,索引的选择性=索引里不同关键字的数目/表中行的总数:
select i.distinct_keys/t.num_rows
from
user_indexes i,
user_tables t
where i.table_name=''表名''
and i.index_name=''索引名''
and i.table_name=t.table_name
/
第五,可以查询user_tab_columns以了解每个列的选择性。
表中所有行在该列的不同值的数目:
select
column_name,
num_distinct
from user_tab_columns
where table_name=''表名''
/