mysql

记录一次SQL优化

2019-05-06  本文已影响0人  良人与我

今天发现一条 SQL 执行的非常慢。所以就想来优化下。
执行了下,发现时间开销 15s,这着实也太久了,前端请求都会 time out 的。


image.png

捣鼓了半天终于时间开销由 15s 变到 0.004s 了。

数据库里就十来万数据,开销却如此之大。
一般这么多join 也是不推荐的。
首先想到是 该加的索引有没有都加上。
仔细对比了下 ,相关的表字段都有了索引。

主要优化思路如下:

1.减少join时候的中间表
通过子查询确定主表的数据为 10 条,然后再去join 其它表。
改动后开销如下


image.png
  1. 减小排序时间开销
    本来按照时间排序,但是这样需要将这个表的数据排序。
    后来改成按照序列号排序,因为序列号的生成规则里包含了时间戳,而且它是主键,b-tree 结构本身就已经排好序了。所以直接拿来用就行了。
    改动后开销如下


    image.png
上一篇下一篇

猜你喜欢

热点阅读