慢 SQL 与索引优化实践

13 阅读1分钟

Skeyevss FAQ:慢 SQL 与索引优化实践

试用安装包下载 | SMS | 在线演示

项目地址:github.com/openskeye/g…


1. 视频业务典型热点查询

  • 按设备/通道/时间 查录像索引;
  • 目录树 懒加载与关键字搜索;
  • 在线状态 批量刷新;
  • 统计报表 跨天聚合。

这些查询若 无合适索引,会在设备量上来后 拖慢 API,间接影响 SIP 协程调度(共享 CPU)。


2. 发现慢查询

  • 开启 slow_query_log,阈值从 200ms~1s 逐步收紧;
  • EXPLAIN ANALYZE(MySQL 8+)看实际行数与回表;
  • APM 追踪 SQL 模板 与 P99。

3. 索引设计原则

  • 高选择性列 在前;避免 冗余索引(维护成本高);
  • 覆盖索引 减少回表;
  • 分页深翻页 用 keyset(seek) 代替大 OFFSET;
  • 注意 隐式类型转换 导致索引失效。

4. 写入与读放大

索引过多会 拖慢批量写入(设备心跳、目录同步)。需 合并写、批量提交(参见性能专题),与索引策略 折中。


5. 锁与事务

长事务持有 行锁 会阻塞心跳更新。报表类 只读 尽量走 从库 或 快照。


慢 SQL 先量化再改索引;凭感觉加索引往往制造 更大慢查询 或 写放大。