Skeyevss FAQ:慢 SQL 与索引优化实践
1. 视频业务典型热点查询
- 按设备/通道/时间 查录像索引;
- 目录树 懒加载与关键字搜索;
- 在线状态 批量刷新;
- 统计报表 跨天聚合。
这些查询若 无合适索引,会在设备量上来后 拖慢 API,间接影响 SIP 协程调度(共享 CPU)。
2. 发现慢查询
- 开启
slow_query_log,阈值从 200ms~1s 逐步收紧; EXPLAIN ANALYZE(MySQL 8+)看实际行数与回表;- APM 追踪 SQL 模板 与 P99。
3. 索引设计原则
- 高选择性列 在前;避免 冗余索引(维护成本高);
- 覆盖索引 减少回表;
- 分页深翻页 用 keyset(seek) 代替大
OFFSET; - 注意 隐式类型转换 导致索引失效。
4. 写入与读放大
索引过多会 拖慢批量写入(设备心跳、目录同步)。需 合并写、批量提交(参见性能专题),与索引策略 折中。
5. 锁与事务
长事务持有 行锁 会阻塞心跳更新。报表类 只读 尽量走 从库 或 快照。
慢 SQL 先量化再改索引;凭感觉加索引往往制造 更大慢查询 或 写放大。