识别次优访问路径 2
1.1.1 误区
检查逻辑读数时,必须注意两个会曲解指标的误区。第一个与一致读有关,第二个与行预取有关。
1.一致读
对于每一条SQL语句,数据库引擎都会保证处理数据的一致性。为了达到这个目的,数据块的一致性副本会基于当前数据块和回滚块在运行时创建。要执行这样的操作需要完成数个逻辑读。因此,访问路径操作执行的逻辑读数非常依赖于需要重建的块数。
以下代码引用自read_consistency.sql脚本生成的输出。请注意使用的查询与上节相同。根据执行统计信息,会返回相同的行数(实际上返回相同的数据)。然而,它会执行更多的逻辑读(相比28,一共执行了354)。会造成这个影响是因为修改了数据块的另一个会话需要执行该查询。由于在查询开始时修改并未提交,数据库引擎就必须重建这些块。这会导致更高的逻辑读:
select * FROM t WHERE n1 BETWEEN 6000 AND 7000 AND n2 = 19;