PmaControl logo PmaControl
  • 首页
  • PmaControl
    • AI智能代理 13个本地代理
    • 定价方案 Community、Cloud、On-Premise、Premium
    • 文档 指南、API、架构
    • 版本历史 全部 5.x 稳定版本
    • 插件市场 社区插件
    • 客户 28+企业
    • 常见问题 25个问题 / 7个类别
    数据库
    • MariaDB 35 篇文章
    • MySQL 15 篇文章
    • Galera Cluster 6 篇文章
    • MaxScale 4 篇文章
    • ProxySQL 3 篇文章
    • Amazon Aurora MySQL 0 篇文章
    • Azure Database 0 篇文章
    • ClickHouse 0 篇文章
    • GCP CloudSQL 0 篇文章
    • Percona Server 0 篇文章
    • SingleStore 0 篇文章
    • TiDB 0 篇文章
    • Vitess 0 篇文章
    解决方案
    • 全天候支持 MariaDB & MySQL紧急支持
    • Observabilité SQL 监控、告警、拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Sécurité & conformité 审计、GDPR、SOC2
    • Migration & upgrade 零停机、pt-osc、gh-ost
  • 定价方案
  • 资源
    • 文档 技术指南与API
    • MySQL 优化中心 Markdown 索引、指标、参数、故障
    • 常见问题 25个常见问题
    • 客户评价 客户反馈与案例
    • 博客 文章与洞察
    • 路线图 即将推出的功能
    专业领域
    • Observabilité SQL 监控、告警、Dot3拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Sécurité & conformité 审计、GDPR、SOC2、ISO 27001
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Performance & optimisation Digests、EXPLAIN、调优
    • Migration & upgrade 零停机、pt-osc
    快速链接
    • GitHub Wiki 26页 — 安装、引擎、插件
    • 源代码 GitHub官方仓库
    • 全天候支持 MariaDB & MySQL紧急支持
    • 预约演示 30分钟 — 真实架构
  • 全天候支持
  • 预约演示
预约演示
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文 🇸🇦 AR العربية
资源 › MySQL 优化中心 › MySQL 架构检查

MySQL 架构检查

用于诊断、衡量和优化 MySQL 的结构化 Markdown 文档。

本页是 PmaControl 的原创文档。它保留了用于 MySQL 优化工作的实用索引结构,不复制第三方内容,也不依赖外部产品。

目标

架构检查用于发现生产中代价高的结构:缺失索引、过大的列、缺失主键、历史 MyISAM 表以及未使用的索引。

检查项

  1. 没有主键的 InnoDB 表。
  2. 重复或高度冗余的索引。
  3. 在过宽索引中使用的 VARCHAR 或 TEXT 列。
  4. 连接列类型或排序规则不同。
  5. 大型表没有归档策略。
  6. 业务完整性需要但缺少 foreign keys。

有用查询

SELECT table_schema, table_name
FROM information_schema.tables t
WHERE engine = 'InnoDB'
  AND table_schema NOT IN ('mysql', 'performance_schema', 'information_schema', 'sys')
  AND NOT EXISTS (
      SELECT 1
      FROM information_schema.table_constraints c
      WHERE c.table_schema = t.table_schema
        AND c.table_name = t.table_name
        AND c.constraint_type = 'PRIMARY KEY'
  );

要点

有价值的架构检查会把每个异常关联到查询、执行计划或可度量的运维成本。

盘点大小、引擎和负责人

从关键业务表及访问它们的查询开始,记录表的用途、保留策略、写入速率和维护窗口。结构元数据只能筛选候选问题,不能证明存在性能故障。InnoDB 的行数和大小是估算值,适合排序,不适合精确核算。不要仅为让盘点显得精确而执行昂贵的全表计数。

SELECT table_schema, table_name, engine, table_rows,
       ROUND(data_length / 1024 / 1024, 1) AS data_mib,
       ROUND(index_length / 1024 / 1024, 1) AS index_mib
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
  AND table_schema NOT IN ('mysql', 'sys', 'performance_schema',
                           'information_schema')
ORDER BY data_length + index_length DESC
LIMIT 20;

结合实际负载评估索引候选项

SELECT table_schema, table_name, redundant_index_name,
       dominant_index_name
FROM sys.schema_redundant_indexes
WHERE table_schema NOT IN ('mysql', 'sys');

SELECT object_schema, object_name, index_name
FROM sys.schema_unused_indexes
WHERE object_schema NOT IN ('mysql', 'sys');

这些 MySQL sys 视图要求已安装 sys schema,并具备相关采集数据。“未使用”仅针对已观测的负载:还应覆盖报表、月末任务、复制节点读取和故障切换后的角色。删除前检查唯一性及外键依赖。前缀重叠只是审核候选项,不是自动删除指令。MySQL 8+ 中符合条件的索引可先在受控测试中设为不可见,但仍会产生写入维护成本。

检查访问路径和列兼容性

SELECT table_name, column_name, column_type, is_nullable,
       character_set_name, collation_name
FROM information_schema.columns
WHERE table_schema = 'app'
ORDER BY table_name, ordinal_position;

EXPLAIN FORMAT=JSON
SELECT id, created_at
FROM app.orders
WHERE customer_id = 42
ORDER BY created_at DESC
LIMIT 20;

将 app.orders 及列名替换为真实的典型查询。查看候选索引、实际选用索引、估算行数、残余过滤和排序。此例中以 (customer_id, created_at) 开头的索引可作为测试候选项,不能视作通用处方。连接列应匹配类型、有无符号、字符集和排序规则。隐式转换或索引列上的函数可能改变访问路径。采用真实的参数分布验证计划,包括数据量大的租户。

分类结构问题

信号 如何确认 下一步
缺少主键 表定义与行身份 选择稳定主键并评估重建成本
冗余索引 定义、依赖与负载覆盖 执行 DDL 前测试移除影响
连接列不兼容 类型、排序规则与实际计划 验证转换及应用语义

将发现转化为受控迁移

  • 保存 SHOW CREATE TABLE、依赖查询、外键和原执行计划。
  • 针对具体 DDL 和版本估算临时磁盘、构建时间、元数据锁等待和复制影响。在线 DDL 仍可能等待元数据锁。
  • 在代表性数据上测试,比较读取延迟、写入开销、大小与结果正确性。
  • 明确回滚方案。重建已删除索引需要时间;结构回滚可能需要数据转换或恢复备份。

继续排查

  • 将每项发现关联到性能调优,并记录在评估页。

官方参考资料

  • MySQL redundant indexes
  • MySQL unused indexes
  • MySQL online DDL
PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
法律声明 GitHub 联系我们
不要等到故障发生才了解您的架构。 © 2014-2026 PmaControl — 68Koncept