Agent Skills
返回列表
💻

数据库优化

开发编程 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/database-optimization-sh-22bpy4。

技能介绍

慢查询从哪查起

线上接口偶发超时、报表扫全表拖垮 CPU,往往不是「加机器」能一劳永逸的。根因通常在执行计划:大表 Seq Scan、估计行数与实际严重偏离、或一次 HTTP 请求里打出十几条 SQL(典型 N+1)。在改 schema 或堆索引之前,需要一套可重复的读计划、验索引、控连接与读写路径的方法。

技能覆盖的核心能力

本技能把 PostgreSQL / MySQL 上常见的优化动作收成可执行的检查清单:

  • EXPLAIN ANALYZE:从下往上读计划;关注 Seq Scan、Nested Loop 行数、无索引 Sort,以及 Rows estimated vs actual 偏差(提示跑 ANALYZE 刷新统计信息)。
  • 索引策略:默认 B-tree 与复合索引列顺序(等值在前,范围/排序在后);PostgreSQL 的 Partial / GIN / GiST 与覆盖索引(index-only scan)。
  • N+1:父表 1 次查询 + 每个子项 1 次查询;开查询日志,单接口 SQL 数 >10 应警惕。
  • 连接池:PgBouncer(transaction 模式)、idle_in_transaction_session_timeout;MySQL 的 max_connections 与 ProxySQL;用 pg_stat_activity / SHOW PROCESSLIST 观测。
  • 只读副本:SELECT 走副本、写走主库;考虑复制延迟;读后写一致性读必须用主库;路由在连接级而非单条 SQL 级。
  • 分区:Range(时序)、Hash(均匀分布);表到 50–100GB 或需快速删历史数据时再考虑。

附带 Query Optimization Checklist(10 步)与 Dangerous Patterns(如 LIKE '%term%'、ORDER BY RANDOM()、深分页 OFFSET 应改 keyset/cursor)。

适用边界

技能是工程向备忘与决策树,不能替代对你库表、 workload 与 ORM 生成 SQL 的实测。副本延迟、事务锁、隐式类型转换导致索引失效等场景,仍需结合慢日志(如 PostgreSQL log_min_duration_statement)与业务 SLA 做权衡;未在资料中展开的其他引擎特性需自行查官方文档。

使用场景

  • 生产接口 P99 突增,需用 EXPLAIN ANALYZE 从下往上读计划,确认大表是否 Seq Scan 并决定是否加 B-tree 或 Partial 索引
  • APM 或慢日志显示同一 HTTP 请求打出超过 10 条 SQL,需对照技能中的 N+1 特征改 ORM 预加载或合并查询
  • PostgreSQL 在 Serverless/高并发下连接数耗尽,需评估 PgBouncer transaction 模式及 idle_in_transaction_session_timeout
  • 时序明细表接近或超过 50–100GB、需快速删旧分区,需选 Range/Hash 分区并检查查询是否带分区键

适合人员

  • 维护 PostgreSQL 线上库、常处理慢查询告警的后端工程师,希望按清单核对索引使用与隐式类型转换
  • MySQL 高并发业务下的 SRE,连接数逼近 max_connections,需要连接上限估算与 ProxySQL 复用对照
  • 已做主从读写分离但遇「写入后立刻读」不一致的业务开发,需明确复制延迟与必须走主库的场景
  • 负责超大明细表与报表的数据平台工程师,要在 EXPLAIN、覆盖索引与表分区之间做 retention 与扫描成本权衡