MySQL 8.4 Release Notes
17.1.2 InnoDB 表的最佳实践
本节描述了使用InnoDB
表的最佳实践。
-
为每个表指定一个主键,使用最频繁查询的列或列组合,或者如果没有明显的主键,则使用自动递增值。
-
在多个表之间使用连接操作,以便从这些表中基于相同ID值的数据。为了提高连接性能,请在连接列上定义外键,并将每个表中的该列声明为同一数据类型。添加外键可以确保引用列被索引,从而改善性能。此外,外键还可以传播删除和更新操作到所有受影响的表,并防止在子表中插入数据,如果对应的ID值不在父表中。
-
关闭自动提交。频繁地提交(每秒数百次)会限制性能(受到存储设备的写速度限制)。
-
将相关DML操作组合成事务,使用
START TRANSACTION
和COMMIT
语句括起来。虽然你不想太频繁地提交,但是你也 shouldn't 发出长时间运行的INSERT
、UPDATE
或DELETE
语句,而是将它们分组提交。 -
不要使用
LOCK TABLES
语句。InnoDB
可以同时处理多个会话对同一张表的读写操作,而不影响可靠性或高性能。要获取某个行组的独占写访问权限,使用SELECT ... FOR UPDATE
语句锁定你想更新的行。 -
启用
innodb_file_per_table
变量或使用通用表空间将数据和索引存储在单独的文件中,而不是系统表空间。innodb_file_per_table
变量默认启用。 -
使用
--sql_mode=NO_ENGINE_SUBSTITUTION
选项启动服务器,以防止创建你不想使用的存储引擎表。