SQL优化:常见索引未利用的情况及策略

需积分: 3 1 下载量 148 浏览量 更新于2024-08-15 收藏 407KB PPT 举报
本文主要探讨了SQL优化中的关键知识点,特别是在某些情况下索引未被使用的常见问题。首先,文章提到了Oracle SQL优化器的两种模式:RBO(规则基础优化器)和CBO(成本基础优化器)。RBO在Oracle 9i中逐渐被淘汰,而CBO在Oracle 10G中成为主流,它的决策依据是查询执行的成本。通过初始化参数如CHOOSE、ALL_ROWS、FIRST_ROWS和FIRST_ROWS_N,用户可以调整优化器的行为。 SQL语句的执行过程分为解释、优化、行源生成和执行语句四个步骤。解释阶段会检查语法正确性、语义一致性,并确保有足够的权限访问数据库对象;优化阶段涉及RBO和CBO的选择,CBO根据预估的资源消耗来决定最佳执行路径;行源生成阶段确定数据的读取方式,单块读取(SRds)和多块读取(MRds)都会影响成本计算;最后执行语句,成本模型考虑了单块和多块读取的时间,以及CPU的使用情况。 索引不被使用的情况包括:对同一表中两列的比较,因为这通常不会利用到索引的高效特性;使用`is null`、`is not null`、`not in`、`not exist`或列与值不等于的操作,因为这些操作可能无法匹配索引;当函数应用在WHERE子句时,如`nvl`、`to_char`等单行函数,这些函数可能导致索引失效;以及使用通配符`%`或`_`作为查询字符串开头,因为它们会模糊匹配,无法直接利用索引。 此外,文章还涵盖了常用的表连接方法、访问路径选择,以及如何使用hint来指导优化器行为。提到的Toad是一个常用的数据库优化工具,它可以帮助用户监控和调整SQL性能。最后,文章可能会提供SQL优化的实际案例和Q&A环节,以帮助读者理解和应用这些理论知识。 本文深入浅出地讲解了SQL优化的关键概念,提供了丰富的实例和实用技巧,对于提高SQL查询效率具有很高的参考价值。