2014-10-14 10:29:53
目标:优化性能
改善性能最好的技术就是在数据库中合理地使用索引。
索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行。
反模式:无规划的使用索引
1、不使用索引或索引不足
2、使用了太多的索引或一些无效的索引
(1)大多数数据库会自动地位主键建立索引,因此额外再定义一个索引就是冗余。
这个额外的索引并无任何好处,它只会成为额外的开销。
(2)字符串索引很大,而且也不太可能对它进行全匹配查找。
(3)使用组合索引是一个很好的选择,但是大部分创建的组合索引都是冗余或者很少使用。
组合索引的顺序也很重要:在查询条件、联合条件或者排序规则上使用索引时按照从左到右的顺序。
3、执行了一些让索引无能为力的查询
Like、表达式,都可能使索引无效。
如何识别反模式:当出现以下情况时,可能是反模式
1、这是我的查询语句,怎样使它更快?
2、我在每个字段上都定义了索引,为什么它没有变的更?
3、我听说索引会使数据库变慢,所以我不使用它。
合理使用反模式:
分离率是衡量数据库索引的一个指标。分离率越高索引效率就越高。
需要时刻关注你的数据库中索引的分离率,并且抛弃那些低效的索引。
解决方案:MENTOR你的索引
1、Measure测量:大多数数据库都提供了一些方法来记录执行SQL查询的耗时,因此可以来定位最耗时的查询。
2、Explain解释:测量之后,分析查询变慢的原因。
每个数据库都使用一种优化工具为每次查询选择最合适的索引,并生产分析报表,称之为“查询执行计划(QEP)”。
3、Nominate挑选:有了查询优化工具的QEP报表,应该仔细地查找那些没有使用索引的查询操作。
4、Test测试:创建完索引之后,需要重新测试跟踪那些查询,确认你的改动确实提升了性能。
5、Optimize优化:索引是小型的、频繁使用的数据结构,因为很适合将他们常驻在内存中。内存操作的性能是磁盘I/O操作的好几倍。
数据库服务器允许你配置缓存所需要的系统内存大小。
6、Rebuild重组:索引在平衡的时候其效率最高,当你更新或者删除记录时,索引就逐渐变得不平衡。
要想最大限度地使用索引,因此要定期对索引进行维护。
结论:了解你的数据库,了解你的查询,然后MENTOR你的索引