在工作过程中学会的一些数据库相关的性能调优相关
慢sql优化
查询优化
索引
单列索引
where\order by\group by 常用的字段创建单列索引
组合索引
涉及多列条件查询创建组合索引,注意符合最左前缀匹配原则
最左前缀匹配原则:
覆盖索引
查询的字段被索引全部覆盖,不用访问表
避免过度索引
过多索引导致INSERT\UPDATE\DELETE开销变大
优化查询语句
减少使用select *
减少在where中对字段进行函数操作
如where year(ts)=2024
应改成 where ts>='2024-01-01' and ts<='2024-12-31'
减少在where中使用OR
OR会全表扫描,替换成IN或子查询
减少子查询
使用JOIN替代子查询
合理使用JOIN
多表关联查询需要关联的字段有索引,连接顺序需要小表驱动大表(小表在左,大表在右)
分页查询
limit offset
使用索引定位起始位置
比如WHERE id > last_seen_id LIMIT 10
减少数据扫描量
不要 SELECT *
,只选择主键字段返回结果后再根据主键查询详细信息。
临时表和缓存
避免死锁和锁等待
索引优化
表结构设计优化
事务和锁优化
配置优化
监控和调优
EXPLAIN分析查询语句
EXPLAIN (SQL)
查看是否走索引
scheme事务分析查看慢sql
druid
根据业务看是否加防抖和遮罩,比如导出报表