文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  InnoDB 表的最佳实践

17.1.2 InnoDB 表的最佳实践

本节介绍使用 InnoDB 表时的最佳实践。

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

  • 如果需要根据多个表中相同的 ID 值提取数据,请使用联接操作。为了获得快速的联接性能,请在联接列上定义外键,并在每个表中使用相同的数据类型声明这些列。添加外键可确保对引用的列进行索引,这可以提高性能。外键还会将删除和更新操作传播到所有受影响的表,并防止在子表中插入数据(如果父表中不存在相应的 ID)。

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

  • 通过使用 START TRANSACTIONCOMMIT 语句将它们括起来,将多组相关的 DML 操作分组到事务中。虽然您不想过于频繁地提交,但也不希望发出大量运行数小时而未提交的 INSERTUPDATEDELETE 语句。

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

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

  • 评估您的数据和访问模式是否能从 InnoDB 表或页面压缩功能中受益。您可以压缩 InnoDB 表,而不会牺牲读/写能力。

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