当你发现随着系统升级,版本迭代,用户不断增加,你的系统逐渐变慢的时候,就要考虑一下是不是需要对数据库进行优化了(当然,性能瓶颈不一定在数据库上),通常来说,优化数据库的手段,我们最先想到的就是索引
。
索引的目的是为了让查询更快。
为了保证你创建的索引能够提升性能而不是降低性能,作为开发人员,该选择什么样的列和数据类型来建立索引呢?
根据相关官方资料显示,有以下注意事项可以参考:
一、哪些要建立索引
- 定义主键的列
- 有外键的列
- 经常查询的数据列
- 谓词(就是在where中使用的列)
- 排序分组(ORDER BY、GROUP BY)的列
- 只增加的列,如果一个列的数据绝大多数是做增加处理,这样的列就可以建立索引
二、哪些不要建立索引
重复值较多的列不要建立索引
,比如用户表的性别字段,最多三种值(男、女、未知)- text、image、byte[]列不要建立索引
- 更新频繁的列不要建立索引,因为如果该列有索引,那么在更新值的时候同时需要更新索引,这样会导致查询变快,更新变慢
另外,有些资料上说,表的索引要有数量限制单表索引的数目一般不要超过3个,最多不要超过5个
。主要是考虑到添加索引列过多会影响磁盘空间和索引维护性能
.但是,笔者的观点:如果我增加一个索引,能明显提升数据库查询性能,为什么要墨守这样的限制呢,我不知道3
、5
这样的数字怎么来的,至今也没有看到有数据能证明单表索引超过5个后性能表现不好的。
所以,笔者认为单表增加索引的多少,哪些字段要增加索引,要根据每个SQL查询的频率和每个查询的重要性,同时兼顾磁盘空间和索引维护成本来综合平衡,找出最佳的优化方案。