Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.1 InnoDB简介  /  14.1.2 InnoDB 表的最佳实践

14.1.2 InnoDB 表的最佳实践

本节介绍使用 InnoDB表格时的最佳做法。

  • 使用最常查询的一个或多个列为每个表指定一个主键,如果没有明显的主键,则指定一个自动增量值。

  • 在基于这些表的相同 ID 值从多个表中提取数据的任何地方使用连接。为了快速连接性能,在连接列上定义外键,并在每个表中声明具有相同数据类型的那些列。添加外键可确保为引用的列建立索引,从而提高性能。外键还会将删除和更新传播到所有受影响的表,并在父表中不存在相应 ID 的情况下阻止在子表中插入数据。

  • 关闭自动提交。每秒提交数百次会限制性能(受限于存储设备的写入速度)。

  • START TRANSACTION通过用括号和 COMMIT语句 将相关的 DML 操作集分组到事务中。虽然您不想过于频繁地提交,但您也不希望发布 运行数小时而未提交 的大量INSERT, UPDATE, 或 语句。DELETE

  • 不要使用LOCK TABLES 语句。InnoDB可以在不牺牲可靠性或高性能的情况下处理多个会话,同时读取和写入同一个表。要获得对一组行的独占写访问权,请使用 SELECT ... FOR UPDATE语法来锁定您打算更新的行。

  • 启用该 innodb_file_per_table 变量以将各个表的数据和索引放入单独的文件而不是系统表空间中。需要此设置才能使用其他功能,例如表压缩。默认情况下启用该 innodb_file_per_table 变量。

  • 评估您的数据和访问模式是否受益于InnoDB表压缩功能。InnoDB您可以在不牺牲读/写能力的情况下 压缩表。

  • 使用选项运行服务器 --sql_mode=NO_ENGINE_SUBSTITUTION 以防止使用您不想使用的存储引擎创建表。