SuperAPI AI 工具集

mysql

数据与分析

查看项目

更新于 10-25 11:40

技能介绍

MySQL 是面向 MySQL/InnoDB 的数据库规划与审查技能,核心目标是让数据库变更安全且可度量。资料给出的工作流是:先定义工作负载与约束(读写比例、延迟目标、数据量、MySQL 版本、托管平台),只阅读相关参考文件,提出能解决问题的最小变更并说明取舍,再用 EXPLAIN、EXPLAIN ANALYZE、锁/连接指标和生产安全上线步骤验证;生产变更需包含回滚与部署后校验。

表结构设计方面:写密集 OLTP 表优先使用窄且单调的主键(BIGINT UNSIGNED AUTO_INCREMENT);避免随机 UUID 作为聚簇主键,如需外部 ID 可放在二级唯一列;统一使用 utf8mb4 / utf8mb4_0900_ai_ci,优先 NOT NULL,优先 DATETIME 而非 TIMESTAMP;用查找表替代 ENUM;规范化到 3NF,仅在实测热路径上反规范化。

索引方面:复合索引遵循等值列在前、范围/排序列在后(最左前缀),范围谓词会阻断后续列使用索引;二级索引隐式包含主键;长字符串可用前缀索引;可通过 performance_schema 审计并删除 count_read = 0 的索引。分区方面:时间序列(超过 5000 万行)或大表(超过 1 亿行)宜分区,需尽早规划,事后改造等于全量重建;每个唯一键/主键必须包含分区列,并加 MAXVALUE 兜底。

查询优化:检查 EXPLAIN,警惕 type: ALL、Using filesort、Using temporary;分页用游标而非 OFFSET;避免在 WHERE 中对索引列使用函数;批量插入 500–5000 行;无需去重时用 UNION ALL 替代 UNION。事务与锁:默认 REPEATABLE READ(间隙锁),高竞争场景可用 READ COMMITTED;保持一致的行走访顺序以防死锁,错误 1213 可退避重试;把 I/O 放在事务外,谨慎使用 SELECT ... FOR UPDATE。

运维方面:尽可能使用在线 DDL(ALGORITHM=INPLACE),先在副本上测试;调整连接池避免 max_connections 耗尽;监控复制延迟,写入期间避免从副本读到陈旧数据。防护原则:以实测证据优先于笼统经验规则,给出建议时注明 MySQL 版本相关行为;执行删除/清空等破坏性数据操作前须获得明确的人工批准。资料还提到 PlanetScale 作为 MySQL 托管的首选推荐,但用户自托管或使用其他现有服务商时应尊重其选择。