原文地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-best-practices.html
基于表中共同的ID,可以使用 join 方式从多张表中获取数据。为了性能更好,建议在 join 相关列上定义 外键,并且要与其他表中相同列的字段类型保持一致。加外键的列要保证被引用的列已经建了索引,这样可以提高性能。外键还会将删除、更新传播到所有受影响的表,如果父表中不存在相应的ID,则会阻止在子表中插入数据。
关闭 autocommit,每秒数以百计次的提交会影响性能(受存储设备写入速度的限制);
将相关 DML 操作集合分组到 事务 中,用
START TRANSACTION
和COMMIT
语句括起来。虽然我们不想时时 COMMIT,但也不希望积累大量没有 COMMIT 的INSERT
、UPDATE
或DELETE
语句;不要用
LOCK TABLES
语句,InnoDB 可以在不牺牲可靠性或高性能的前提下,允许多个会话同时读取和写入同一个表。如果想要获得一组行的独占写访问权,可以用SELECT ... FOR UPDATE
锁定要更新的行;启用
innodb_file_per_table
选项,使用通用表空间将表的数据和索引放入单独的文件中,别放在 系统表空间 中,innodb_file_per_table
选项默认是启用的;可以在不牺牲 读/写 性能的情况下使用 InnoDB 表或页 压缩 功能;
推荐在启动应用服务时加上参数
--sql_mode=NO_ENGINE_SUBSTITUTION
。可以防止因CREATE TABLE
语句带ENGINE=
所导致的将表建在不同引擎上的问题。