[摘要]+--------+1 row in set (0.09 sec)很明显,如果只查询主键,执行效率对比查询全部字段,有很大的提升。 推测只查询主键的情况 因为二级索引已经找到主键值,而查询只需要读...
+--------+1 row in set (0.09 sec)很明显,如果只查询主键,执行效率对比查询全部字段,有很大的提升。 推测只查询主键的情况 因为二级索引已经找到主键值,而查询只需要读取主键,因此mysql会先执行offset偏移操作,再根据后面的主键索引读取数据块。 需要查询所有字段的情况 因为二级索引只找到主键值,但其他字段的值需要读取数据块才能获取。因此mysql会先读出数据块内容,再执行offset偏移操作,最后丢弃前面需要跳过的数据,返回后面的数据。 证实InnoDB中有buffer pool,存放最近访问过的数据页,包括数据页和索引页。 为了测试,先把mysql重启,重启后查看buffer pool的内容。 可以看到,重启后,没有访问过任何的数据页。 查询所有字段,再查看buffer pool的内容 mysql> select * from member where gender=1 limit 300000,1;
+--------+------------+--------+ |
关键词: 详细说明在mysql查询时 offset过大影响性能的原因与优化办法