扫盲 2026.10.09 11:34 40 次浏览 0 条评论

数据库查询慢的简单原因

数据库查询慢,多数不是数据库不行,是写法有问题。

最常见就一个:该加索引的字段没加。几万行以上没索引就是全表扫描,一条条翻,慢得离谱。用 EXPLAIN 一看就明白。

EXPLAIN SELECT id,name FROM user WHERE name='tom';
-- type: ALL 全表扫描;key: NULL 说明没走索引
ALTER TABLE user ADD INDEX idx_name(name);  -- 补上索引

第二个坑:SELECT *。用不上的字段也捞出来,IO 白白翻好几倍,改成只查需要的列。

第三个:字段上套函数或做运算,比如 WHERE DATE(add_time)='2024-01-01',索引直接失效。换成范围写法:

-- 索引失效
SELECT * FROM orders WHERE DATE(add_time)='2024-01-01';
-- 改成范围,能走索引
SELECT id FROM orders WHERE add_time >= '2024-01-01' AND add_time < '2024-01-02';

再就是服务器本身:MySQL 内存配小了,数据全在磁盘上倒腾;或者用的机械盘。顺序别乱,先把索引和 SQL 写法理顺,再回头调配置。

说点什么 0

行思随记

欢迎来到:行思随记