一、谨慎而有效的使用索引
使用explain命令是确定需要哪些索引的最好办法。在有些情况下,索引过多切分布很广的时候会大大降低插入和删除的性能。还会降低复制和恢复操作的性能。应该定期检查索引以确保它们都是有意义的且被使用了。应该删除没有被使用,使用有限制或分布很广的索引。
二 、使用规范化,但不要使用过头
规范化(至少是第三范式),在有些情况下,你可能希望违法这些规则。当使用那些经常被访问切分布有限的查找表时,会使系统性能降低。每次你使用查询信息,它们必须使用join以获取完整数据。join的开销很大,而且频繁访问会使开销随着时间逐渐增加。为了减少这种潜在的性能问题,可以使用枚举字段存储数据,而不是使用查找表存储数据。例如,可以使用枚举字段存储头发颜色,而不是创建表来存储头发颜色值.
三、使用正确的存储引擎
mysql支持多个存储引擎,每个存储引擎都具有独特的功能和用途,可以使数据库设计者通过使用最适合他们的应用程序的存储引擎来改善数据库系统的性能。使用SHOW ENGINES 命令查看那些存储引擎启用了。
InnoDB存储引擎支持事务,是mysql中目前唯一事务性的引擎。InnoDB中所有的索引都是B-trees,在这个B树中suo9yin记录被存储在树的叶子页。InnoDB适用于高性能和事务处理环境。
MyISAM存储引擎适用高级缓存和索引机制提高数据检索和索引速度,MYISAM和适合在各种应用程序要快速检索数据而不需要事务的时候。
三、通过Query Cache适用师徒来加速结果
视图是封装复杂查询的一个简便方法,可以使用视图来水平地(更少的列)或垂直地(SELECT 语句中使用WHERE子句)限制数据。使用视图来限定返回列,Query Cache村村频繁使用的查询结果,使用提供标准结果集的视图可以提高结果被缓存的概率,从而是检索更高效。
三、使用约束
MySQL的约束类型有: 唯一索引,主键,外键,枚举值,集合,默认值,NOT NULL选项。索引有助于提高数据检索速度。
唯一索引是表中某个字段上的简单索引,并保证在表中这个字段不使用NOT NULL约束的前提下该字段没有重复值。
枚举值列表可以节省空间,可以使遍历数据更高效,一个枚举类型只允许存储一个值。
使用DEFAULT选项为字段提供默认值是个很好的方法,可以防止出现错误结构的数据值。
可以再大部分数据类型上设置默认值,还可以在日期和时间字段上使用默认时间,可以避免无效日期时间值的产生,
默认值可以允许应用程序不提供值,从而在插入数据时减少发送到服务器的数据量。
四、使用explain,analyze和optimize
使用这些命令来诊断和调优