Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Best Practices for InnoDB Tables

17.1.2 InnoDB 表的最佳实践

本节描述了使用InnoDB表的最佳实践。

  • 为每个表指定一个主键,使用最频繁查询的列或列组合,或者如果没有明显的主键,则使用自动递增值。

  • 在多个表之间使用连接操作,以便从这些表中基于相同ID值的数据。为了提高连接性能,请在连接列上定义外键,并将每个表中的该列声明为同一数据类型。添加外键可以确保引用列被索引,从而改善性能。此外,外键还可以传播删除和更新操作到所有受影响的表,并防止在子表中插入数据,如果对应的ID值不在父表中。

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

  • 将相关DML操作组合成事务,使用START TRANSACTIONCOMMIT语句括起来。虽然你不想太频繁地提交,但是你也 shouldn't 发出长时间运行的INSERTUPDATEDELETE语句,而是将它们分组提交。

  • 不要使用LOCK TABLES语句。InnoDB可以同时处理多个会话对同一张表的读写操作,而不影响可靠性或高性能。要获取某个行组的独占写访问权限,使用SELECT ... FOR UPDATE语句锁定你想更新的行。

  • 启用innodb_file_per_table变量或使用通用表空间将数据和索引存储在单独的文件中,而不是系统表空间。innodb_file_per_table变量默认启用。

  • 评估你的数据和访问模式是否受益于InnoDB表或页压缩功能。你可以将InnoDB表压缩,而不影响读写能力。

  • 使用--sql_mode=NO_ENGINE_SUBSTITUTION选项启动服务器,以防止创建你不想使用的存储引擎表。