据我所知,当表具有聚簇索引时,在针对某些数据对表进行范围扫描时会发生这种情况:
先找出较低的范围,追踪到它所在的叶子节点,然后通过下一页指针逐页遍历叶子级别只要该页中的最大值小于范围扫描的较大值即可健康)状况。
一旦到达最后一行超过该页面的页面,该过程就会停止,在该页面内进行二进制搜索以找出该记录,并返回到目前为止找到的所有记录。
如果页面不在内存中,逐页调出可能是昂贵的 I/O 操作,因此为了缓解这种情况,预读扫描由父页面在上一级完成,这样当进程前进到一个叶级页面来验证它,它已经被父级页面之一带到内存中。
我正在观看一些 SQL Server 教程视频,其中说如果在叶级别存在逻辑碎片,那么物理页面顺序与逻辑页面顺序不一致,预读扫描失败并且数据库被强制执行检索所有页面的完整 I/O 操作。
有人能告诉我为什么吗?为什么物理顺序很重要?整个遍历不就是通过叶级页面的下一页指针逻辑遍历完成的吗?
逻辑碎片对预读扫描到底有什么影响?