我是靠谱客的博主 顺利中心,最近开发中收集的这篇文章主要介绍Mysql优化之延迟关联,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有如下sql:SELECT * FROM user WHERE name='abc' ORDER BY age LIMIT  10000,10。这个语句同时使用了order和limit,如果没有索引的话会很慢。那么可以加上如下索引(name,age)。但是加索引之后可能还是很慢,因为这个索引不是覆盖索引,查询字段为*,需要回表取索引之外的字段。因为这条语句实际上只需要10条数据,所以可以针对limit进行优化,优化方案有两种:

  • 可以从业务上限制,禁止用户翻这么多页
  • 如果必须从10000开始取数据,就可以用到延迟关联技术。将语句改成

SELECT * FROM user a JOIN (SELECT id FROM user WHERE name='abc' ORDER BY age LIMIT  10000,10) b ON a.id=b.id

优化原理:第一个语句根据索引查找name='abc‘的数据并排序,然后回表通过主键查找所有匹配行的其他字段,最后舍弃前10000条数据,只取10条。第二个语句也是根据索引查找name='abc‘的数据并排序,然后舍弃前10000个主键,只取10个主键,再连表通过这10个主键查找其他字段。可以看到全部匹配行回表查字段的过程被优化成了10条记录的回表。

最后

以上就是顺利中心为你收集整理的Mysql优化之延迟关联的全部内容,希望文章能够帮你解决Mysql优化之延迟关联所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部