优化查询 === 查询优化往往是 MySQL 性能优化中最先着手的部分,因为大多数性能问题最终都会落到 SQL 执行效率上。 ### 分析查询语句 优化 SQL 的第一步不是改写,而是分析。 最常见的方法是使用: ```sql EXPLAIN SELECT * FROM user WHERE city = '上海'; ``` `EXPLAIN` 可以帮助我们了解: - 是否使用了索引 - 扫描了多少行 - 连接顺序是否合理 - 是否出现了全表扫描 ### 索引对查询速度的影响 没有索引时,MySQL 可能需要扫描整张表; 有合适索引时,则可以更快定位记录。 例如: ```sql SELECT * FROM user WHERE mobile = '13800000001'; ``` 如果 `mobile` 上建立了索引,查询效率通常会明显提高。 ### 使用索引查询 索引通常更适合以下场景: - 精确匹配 - 范围查询 - 排序和分组 - 连接字段匹配 例如: ```sql SELECT * FROM orders WHERE user_id = 1 ORDER BY created_at DESC; ``` 如果 `user_id` 和 `created_at` 的使用模式稳定,就值得考虑针对性索引设计。 ### 优化子查询 某些子查询执行效率较低时,可以考虑: 1. 改写为连接查询 2. 通过索引提升子查询效率 3. 避免不必要的嵌套层级 例如某些 `IN (子查询)` 或 `EXISTS` 查询,在数据量较大时就需要特别关注执行计划。 ### 小结 优化查询的核心是:先分析,再改写,最后验证。高频慢 SQL 的优化收益通常远高于零散小优化。