[摘要]+------------+----------+2 rows in set (0.04 sec)可以看出,此时buffer pool中关于member表只有13个数据页,263个索引页。因此减少了...
+------------+----------+2 rows in set (0.04 sec)可以看出,此时buffer pool中关于member表只有13个数据页,263个索引页。因此减少了多次通过主键索引访问数据块的I/O操作,提高执行效率。 因此可以证实,mysql查询时,offset过大影响性能的原因是多次通过主键索引访问数据块的I/O操作。(注意,只有InnoDB有这个问题,而MYISAM索引结构与InnoDB不同,二级索引都是直接指向数据块的,因此没有此问题 )。 InnoDB与MyISAM引擎索引结构对比图 
优化方法根据上面的分析,我们知道查询所有字段会导致主键索引多次访问数据块造成的I/O操作。 因此我们先查出偏移后的主键,再根据主键索引查询数据块的所有内容即可优化。 |
关键词: 详细说明在mysql查询时 offset过大影响性能的原因与优化办法