MySQL 技能用于对 MySQL/InnoDB 进行安全、可度量的变更。其核心工作流为:先定义工作负载与约束(读写比例、延迟目标、数据量、MySQL 版本、托管平台),只阅读各章节中链接的相关参考文件,提出能解决问题的最小改动并说明权衡,用证据(EXPLAIN、EXPLAIN ANALYZE、锁/连接指标以及生产安全的发布步骤)进行验证;对于生产变更,需包含回滚与部署后验证。
架构设计方面:写密集的 OLTP 表优先使用窄的、单调的主键(BIGINT UNSIGNED AUTO_INCREMENT);避免将随机 UUID 作为聚簇主键,若需要外部 ID,可将 UUID 保留在二级唯一列中;始终使用 utf8mb4 / utf8mb4_0900_ai_ci,优先 NOT NULL,优先 DATETIME 而非 TIMESTAMP;用查找表替代 ENUM;规范化到 3NF,仅在经过度量的热路径上做反规范化。相关参考:primary-keys、data-types、character-sets、json-column-patterns。
索引方面:复合索引顺序为等值条件在前,范围/排序在后(最左前缀规则);范围谓词会阻止后续列使用索引;二级索引隐式包含主键;长字符串使用前缀索引;通过 performance_schema 审计,删除 count_read = 0 的索引。相关参考:composite-indexes、covering-indexes、fulltext-indexes、index-maintenance。
分区方面:对时间序列(超过 5000 万行)或大表(超过 1 亿行)进行分区;需提前规划,事后改造等于全量重建;每个唯一键/主键都要包含分区列;始终添加 MAXVALUE 兜底分区。相关参考:partitioning。
查询优化方面:检查 EXPLAIN,危险信号包括 type: ALL、Using filesort、Using temporary;使用游标分页而非 OFFSET;避免在 WHERE 中对索引列使用函数;批量插入(500–5000 行);在无需去重时用 UNION ALL 替代 UNION。相关参考:explain-analysis、query-optimization-pitfalls、n-plus-one。
事务与锁方面:默认 REPEATABLE READ(间隙锁),高竞争场景使用 READ COMMITTED;一致的行走访问顺序可防止死锁;对错误 1213 使用退避重试;在事务外执行 I/O;谨慎使用 SELECT ... FOR UPDATE。相关参考:isolation-levels、deadlocks、row-locking-gotchas。
运维方面:尽可能使用在线 DDL(ALGORITHM=INPLACE),先在副本上测试;调整连接池,避免负载下 max_connections 耗尽;监控复制延迟,写入期间避免从副本读取过期数据。相关参考:online-ddl、connection-management、replication-lag。
安全护栏:优先使用经过度量的证据而非笼统的经验法则;给出建议时注明 MySQL 版本特定行为;在执行破坏性数据操作(drop/delete/truncate)前,需获得明确的人工批准。