bitsCN.com mysql的late row lookups(延迟row查找) Sql代码CREATE TABLE `20130122handler` (`id` int(11) NOT NULL AUTO_INCREMENT,`uid` int(11) NOT NULL,`content` varchar(50) NOT NULL,PRIMARY KEY (`id`),KEY `20130122handler_idx_uid` (`uid`)) ENGINE=InnoDB里面有60w数据,现在模拟按uid排序分页的情况要看第七页的内容,用Sql代码select SQL_NO_CACHE * from 20130122handler order by uid LIMIT 120,20查找20条数据,基本就是瞬间的事情假设用户比较变态,直接点到了102页,用Sql代码select SQL_NO_CACHE * from 20130122handler order by uid LIMIT 2020,20查找20条数据,发现各种性能相当差MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载似乎mysql在这种情况下,要从20130122handler_idx_uid索引中读取2040条secondary记录,然后执行2040次的主键查询,然后返回20条,所以浪费了2020次主键查询可以考虑用这种手段,减少无用的row lookup Sql代码select SQL_NO_CACHE m.* from(select uid from 20130122handler ORDER BY uid LIMIT 2020,20) t,20130122handler m where t.uid=m.uid这是因为20130122handler_idx_uid是secondary索引,所以要row lookup用了Sql代码select SQL_NO_CACHE * from 20130122handler order by id LIMIT 120,20 select SQL_NO_CACHE * from 20130122handler ORDER BY id LIMIT 2040,20差别就不明显了bitsCN.com
