MySQL 索引与慢查询优化
410 字
2 分钟
MySQL 索引与慢查询优化
每条查询的时间应该控制在200ms内 否则认为是慢查询
慢查询带来的后果是:IO开销过大,锁持有时间增加,导致数据库吞吐量降低
排查与定位
- 开启慢查询日志:
slow_query_log=ON,long_query_time=0.2,配合pt-query-digest或云监控聚合分析。 - 用
EXPLAIN看执行计划,重点看type(至少到range,避免ALL全表扫描)、key(实际用到的索引)、rows(预估扫描行数)、Extra(Using filesort/Using temporary都是危险信号)。
JOIN 与数据量
内联JOIN是求交集,数据变小
外JOIN,会导致数据量过大
- JOIN 的驱动表尽量选过滤后结果集小的那张,被驱动表的关联列必须有索引。
- 避免在 JOIN 条件列上做函数运算或类型转换(如字符串列和数字比较),否则索引失效。
索引失效的常见场景
- 对索引列使用函数或运算:
WHERE DATE(created_at) = ...、WHERE id + 1 = ...。 - 隐式类型转换:varchar 列用数字比较。
- 前导模糊匹配:
LIKE '%keyword'。 - 联合索引不满足最左前缀。
- IN 列表过大:如果 IN 关键字包含的id过多,数据库有可能抛弃索引直接进行全表扫描(优化器认为回表成本高于全表扫描)。
分批查询
如果单次查询的数据量大于1000,则最好需要分批次进行查询 每批次500条
分批不只为了保护索引,还能控制单次网络包大小、减少锁持有时间与内存占用。配合覆盖索引(只 SELECT 需要的列)效果更好。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
MySQL 索引与慢查询优化
https://blog.81vm3.xyz/posts/mysql-index-optimization/相关文章智能推荐
1
微服务之间如何传递 trace
后端开发跨服务传递的是 trace 上下文而非 tracer:HTTP header、gRPC metadata 与 MQ 消息头的标准做法。
2
一致性哈希:consistent 与 rendezvous 的对比
后端开发两种分布式哈希的均匀度与耗时对比结论:节点少选 rendezvous,节点多且时间敏感选 consistent。
3
微服务鉴权与网关职责
后端开发Gateway 负责认证、Service 负责授权:身份上下文透传、反例风险与文件服务落地场景。
4
Kafka 的分区与副本机制
后端开发Kafka Broker/Topic/分区的关系,以及 leader-follower 副本的读写与冗余备份机制。
5
本地负缓存
后端开发把不存在/失败的查询结果缓存在本地内存中,短时间内直接返回,避免重复打到下游系统。
随机文章随机推荐











