1个mysql全表扫描查询优化疑问

查询①

SELECT `id`,`nickname`,`bind_time`,`province_id`,`city_id`,`area_id` FROM `user` ORDER BY add_time DESC LIMIT 437130,10

这个查询需要大概700ms;

查询②

SELECT `id` FROM `user` ORDER BY add_time DESC LIMIT 437130,10

这个查询只需要100+ms就可以,然后再根据id查询对应的数据,查询速度就有很大提升;

add_time字段并没有索引,并且加上无索引的where条件查询结果也是差不多;网上说是 延迟关联 ,但这里并没有使用到覆盖索引,那是什么原因导致的查询②比查询①快这么多,同样都是全表扫描;请各路大神帮忙解答。

阅读 2.9k
3 个回答

id是主键,单查id会用到主键唯一索引,而且查1列跟查多列的速度肯定是不一样的

同意楼上解释,多个字段需要回表

新手上路,请多包涵

id是主键的话,第二个查询应该是只全表查询了索引树,第一个查询因为有别的字段没索引,所以全表查的是数据。索引树的大小可能是2M,但数据的大小远超过这个,所以数据量越大这个时间差越大。你可以试下只有几条数据的,查询时间应该没太大差别。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题