本节介绍使用
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
以防止使用您不想使用的存储引擎创建表。