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

捣鼓了半天终于时间开销由 15s 变到 0.004s 了。
数据库里就十来万数据,开销却如此之大。
一般这么多join 也是不推荐的。
首先想到是 该加的索引有没有都加上。
仔细对比了下 ,相关的表字段都有了索引。
主要优化思路如下:
1.减少join时候的中间表
通过子查询确定主表的数据为 10 条,然后再去join 其它表。
改动后开销如下

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