欢迎来到润旭源码网
帮助中心

润旭源码网

热门搜索: 企业源码    免费源码   

SQL查询优化原理分析(900W+数据,17s-300ms)

  • 时间:2020-09-10 10:00 编辑: 来源: 阅读:203
  • 扫一扫,手机访问
摘要:有一个流程图,它不分为数据库和表。当前数据量为950W。此限制用于分页查询。优化前查询时间约167s(执行16s831ms,取数107ms)。按以下方式调整SQL后,时间为347ms(执行:163ms,取数:184ms)。优化前的SQL类似于:优化后的SQL如下(这种优化方法在高性能MySQL中提到过):首先,解释一下MySQL版本:让我们再看看表结构:ID是自动递增主键,Val是索引。大量数据涌入,总计500万:我们知道,当limit

有一个流程图,它不分为数据库和表。当前数据量为950W。此限制用于分页查询。优化前查询时间约167s(执行16s831ms,取数107ms)。按以下方式调整SQL后,时间为347ms(执行:163ms,取数:184ms)。优化前的SQL类似于:


优化后的SQL如下(这种优化方法在高性能MySQL中提到过):

首先,解释一下MySQL版本:


让我们再看看表结构:


ID是自动递增主键,Val是索引。


大量数据涌入,总计500万:


我们知道,当limitoffsetrows中的偏移量较大时,将存在效率问题:


为了达到同样的目的,我们一般会重写如下:


找到索引叶节点数据。根据叶节点上的主键值,在聚集索引上查询所有必需的字段值。


类似于下图:


有人会问:既然索引是在开头使用的,为什么不先查询索引叶节点的五个节点,然后查询聚集索引中的实际数据。这样,只需要5个随机I/O,类似于以下过程:


现在让我们在实践中确认上述推论:


我只能间接地证明:


如您所见,目前缓冲池中没有关于测试表的数据页。


可以看出,此时缓冲池中的测试表有4098个数据页和208个索引页。


运行SQL:


为了确保每次重新启动数据库时都清空缓冲池,我们需要在关机时关闭InnoDB缓冲池转储,在启动时关闭InnoDB缓冲池加载。这两个选项可以在数据库关闭时控制缓冲池中的数据,在数据库打开时控制磁盘上加载的数据。


  • 全部评论(0)
资讯详情页最新发布上方横幅
联系我们

QQ:888477 {点击直接联系}

邮箱:runxu123@qq.com

时间:周1——周6 【9:00-23:00

联系客服
购买源码 源码咨询 投诉建议 联系客服
0373-6621888
手机版

扫一扫进手机版
返回顶部