Oracle SQL优化实战要点解析(11)
11.1. 充分利用索引有序特性,避免发生大表上的FTS,以及对中间大数据集的排序。
11.1.1. 适用场景
从一个或多个大表(例如:亿行级或TB级数据量)中过滤出全列大数据集(例如:数百万或千万行数据),对该大数据集按其中某列进行排序,最终,只取最前面的少部分数据(例如:数十行数据)作为最终结果输出。
11.1.2. 潜在问题
1)因为要从大表中过滤出全列大数据集,可能会导致大表或大表所有分区上的FTS。
2)因为最终结果要求按某个列排序后,取最前面的少量数据,可能导致对中间大数据集的排序操作。
3)CBO可能不会自动产生理想的执行计划。
11.1.2. 关键要点
1)创建索引时,选择合适的索引列,例如:排序列+某些过滤条件列。
2)过滤出的中间数据集密度足够大,否则,也会因为得到最终结果前,需要扫描大量索引块而导致的性能问题。
3)为了使SQL语句产生理想的执行计划,可能需要人工干预CBO(例如:hint)。