InnoDB表的最佳实践
本节描述使用InnoDB表的最佳实践。
- 为每个表中查询最频繁的一个或多个列指定主键,如果没有明显的主键,可以使用自增(auto-increment)。
- 基于相同的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运行服务器,以防止在CREATE TABLE的engine =子句中指定的引擎出现问题时使用不同的存储引擎创建表。