MySQL 优化
以下是 SQL 查询的典型执行顺序:
-
FROM 和 JOIN
- 这里确定了要从哪些表中查询数据以及如何进行表之间的连接。
-
WHERE
- 过滤出不符合条件的记录。
-
GROUP BY
- 将来自多个记录的数据值分组为一个数据集或根据某些条件进行分组。
-
HAVING
- 在
GROUP BY
之后对分组进行过滤。通常与聚合函数一起使用。
- 在
-
SELECT
- 选择要显示的列。这里还会执行任何列上的计算或转换。
-
ORDER BY
- 对结果集进行排序。
-
LIMIT / OFFSET
- 限制返回的记录数或确定返回记录的起始位置。
性能监控:
profiles performance_schema 连接数
存储:hash B+
explain 执行计划
索引匹配:全值匹配、匹配最左前缀、匹配列前缀、匹配范围值、精准匹配某一列并范围匹配另外一列、只访问索引的查询
system const ref range index all
聚集索引:按顺序插入效率最高
页分裂、页合并
数据类型:
更小通常更好
避免使用null
mysql 可使用枚举类
合适适用范式和反范式
优化小细节:
union all in or exists (双循环)
范围列 后的索引失效
join 类型一致 不要使用3张表
强制类型转换会转换为全表扫描
区分度不高的不宜建立索引
单索引字段数不超过5个
join :嵌套循环
小表驱动大表
内存buff 有大小限制
and 是在表连接前过滤A表活B表里面那些记录符合连接条件,同时兼顾left join right join,
即假如是左连接,如果坐标某条记录不符合连接条件,仅不参与连接,但仍然保留在结果集中 右连接结果显示NULL
on 条件是在生成临时表的条件,它不管on中的条件是否为真,都会返回左表中的记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具