Federico Razzoli Asked: 2018-03-07 14:56:34 +0800 CST2018-03-07 14:56:34 +0800 CST 2018-03-07 14:56:34 +0800 CST 为什么向后扫描索引更慢? 772 经验测试表明,在 InnoDB 表上这样的查询: SELECT indexed_column FROM tab ORDER BY indexes_column ASC; 比它的对应物更快ORDER BY ... DESC。为什么会这样? 注意:我使用 MySQL 5.7 和 5.6 进行了测试。所以这与 8.0 中的升序索引无关。 mysql index 1 个回答 Voted Best Answer ypercubeᵀᴹ 2018-03-07T23:58:19+08:002018-03-07T23:58:19+08:00 相关文章MySQL 8.0 Labs – Descending Indexes in MySQL的作者 Chaithra Gopalareddy在评论中解释了为什么后向索引扫描的效率略低于前向扫描: 感谢您对新功能表现出兴趣。前向扫描中约 15% 的成本收益 可归因于 innodb 中进行的优化,以支持前向扫描而不是后向扫描。 例如:在页面内进行扫描 - 页面中的记录形成单链表。为了获得下一条记录,前向扫描只是跟随链接,因为后向扫描需要从开始(第一个槽)开始直到当前槽/记录来识别前一条记录。 除了上述之外,还有一些其他因素,例如在页面切换期间 -当前在 innodb 中定义的页面锁定规则更倾向于前向扫描而不是后向扫描。 所以有两个因素: 页面内记录的单链表结构 关于页面切换的页面锁定规则
相关文章MySQL 8.0 Labs – Descending Indexes in MySQL的作者 Chaithra Gopalareddy在评论中解释了为什么后向索引扫描的效率略低于前向扫描:
所以有两个因素: