InnoDB 表的最佳实践
每张表指定主键,如果没有明显主键列,使用auto-increment值。
使用 join 连接多张表时,在连接列上使用相同数据类型,并定义外键约束。在MySQL中在列上定义外键约束时,会自动在列上创建索引,并且提供级联删除、更新功能。
关闭自动提交。
分组DML操作。
不要使用LOCK TABLES语句,如果要给行添加排它写锁,可以通过SELECT ... FOR UPDATE语句实现。
enable file_per_table_names,默认开启。
评估数据和访问模式是否受益于InnoDB表或者Page Compression。enable Page Compression不会牺牲read/write能力。
SQL Mode配置 --sql_mode=NO_ENGINE_SUBSTITUTION 选项。这个在创建表时,如果指定的--engine 选项有问题,不会自动创建默认存储引擎的表。
InnoDB测试和基准测试
如果测试现有表(不使用InnoDB),将其存储引擎改为InnoDB后的影响。有两种方法:
第一种方法:ALTER TABLE ... ENGINE=InnoDB
第二种方法:CREATE TABLE ... AS SELECT * FROM ... (这样对源表没有影响)
在真实负载下对整个应用程序评估性能,安装最新版的MySQL Server并做基准测试。
测试整个应用程序的生命周期,涉及安装、高负载运行、服务器重启。通过KILL 进程模拟数据库在繁忙状态下断电故障,验证数据库是否可以在重启后成功恢复。
如果是复制环境,测试复制中的各种配置。