返回数说广场
1
以下哪些情况容易导致当前步骤预估行数与实际行数差异过大?(ABCD)
A、统计信息与实际差异过大
B、表连接的连接列或条件列存在函数列
C、存在count stopkey的SQL根据排序列顺序采用了索引全扫或降序扫描
D、条件列包含双%、多列条件相互间存在关联性或直方图等
解析:
A 当Oracle数据库的统计信息(如行数、列的唯一值数量、列的分布等)与实际数据分布存在较大差异时,优化器在生成执行计划时可能会基于不准确的数据来预估行数,从而导致预估行数与实际行数差异过大。
B 如果在表连接的连接列或条件列上使用了函数(如UPPER()、LOWER()、TRUNC()等),这可能会改变列上的索引使用情况,因为索引通常不适用于经过函数处理的列。这可能导致优化器在预估行数时无法准确估计,因为它可能无法考虑到函数对列值的影响。
C `count stopkey`通常与查询的停止条件相关。如果查询确实因为使用了某种特定的扫描方式(如索引全扫或降序扫描)而导致性能问题,这可能会间接影响预估行数的准确性,特别是当这些扫描方式与数据的实际分布或统计信息不一致时。
D 当查询条件包含通配符(如`LIKE '%value%'`),特别是双通配符(即`%`在值的前后都出现),这可能会使索引变得无效,因为Oracle需要扫描更多的行来找到匹配项。此外,如果多个条件列之间存在关联性,但统计信息没有准确地反映出这种关联性,那么优化器在预估行数时可能会出现偏差。直方图可以提供关于列值分布的更多信息,但如果直方图没有更新或不准确,也可能导致预估行数的不准确。
0
1 207
分享
评论
热门数说



