MySQL查询慢?我用这三招解决了90%的问题
技术笔记 7 次阅读

MySQL查询慢?我用这三招解决了90%的问题

# MySQL # 技术笔记 # 原创

前几天线上报警,有个接口响应时间突然飙到了5秒。查了一下日志,发现是SQL查询太慢了。

讲道理,这种问题谁都遇到过,但真要排查起来,很多人都不知道从哪下手。今天把我常用的三招分享给大家,基本上能解决90%的慢查询问题。

第一招:先看看索引对不对

MySQL索引优化

90%的慢查询都是索引问题。之前我写了个SQL,觉得写得挺优雅的,结果一跑全表扫描。

就用这个命令一看:

EXPLAIN SELECT * FROM users WHERE phone = "138xxxxxxx";

一看type列是ALL,妥妥的全表扫描。给phone字段加个索引,查询时间直接从2.3秒降到了10毫秒。

就是这么简单,但很多人就是忘了这一步。

第二招:不要SELECT *

SQL优化技巧

很多人写图省事,上来就SELECT *。我之前也这样,觉得反正数据也不多,无所谓。

直到有一次,表里面加了个text字段存了大文本,查询一下就慢了。改成只查需要的字段,性能立刻上来了。

-- 别这么写
SELECT * FROM article WHERE id = 123;

-- 这么写
SELECT id, title, summary FROM article WHERE id = 123;

别小看这几个字段,数据量大了差好几倍。

第三招:LIMIT分页要注意

还有个坑,就是深度分页。比如LIMIT 100000, 20,MySQL得先扫10万条,再返回后面20条,能不慢吗。

改成用子查询先查ID,再关联:

-- 慢查询
SELECT * FROM article ORDER BY id LIMIT 100000, 20;

-- 优化后
SELECT * FROM article WHERE id >= (
    SELECT id FROM article ORDER BY id LIMIT 100000, 1
) LIMIT 20;

说实话,都是些基础的东西,但就是这些基础的东西,最容易出问题。我也是踩了无数坑,才慢慢记住的。你们有什么MySQL优化的小技巧?评论区聊聊。

分享

评论 (0)

评论通过后显示

暂无评论,来写第一条吧 ✍️

0.042647s