一个索引的选择性越接近于1,这个索引的效率就越高。
假如是使用基于cost的最优化,优化器不应该使用选择性不好的索引。假如是使用基于rule的最优化,优化器在确定执行路径时不会考虑索引的选择性(除非是唯一性索引),并且不得不手工优化查询以避免使用非选择性的索引。
确定索引的选择性,可以有两种方法:手工测量和自动测量。
(1)手工测量索引的选择性
假如要根据一个表的两列创建两列并置索引,可以用以下方法测量索引的选择性:
列的选择性=不同值的数目/行的总数 /* 越接近1越好 */
|
假如我们知道其中一列索引的选择性(例如其中一列是主键),那么我们就可以知道另一列索引的选择性。
手工方法的优点是在创建索引前就能评估索引的选择性。
(2)自动测量索引的选择性
假如分析一个表,也会自动分析所有表的索引。
第一,为了确定一个表的确定性,就要分析表。
|
第二,确定索引里不同要害字的数目:
|
第三,确定表中行的总数:
|
第四,索引的选择性=索引里不同要害字的数目/表中行的总数:
|
第五,可以查询USER_TAB_COLUMNS以了解每个列的选择性。
评论加载中…
![]() |