索引能够提升数据的检索效率,也能够下降数据库的IO成本,而且索引还能够下降数据库的排序成本。排序分组操做主要消耗的就是CPU资源和内存,因此可以在排序分组操做中好好的利用索引将会极大地下降CPU资源的消耗。数据库
如何断定是否须要建立索引?性能
一、较频繁地做为查询条件的字段.net
这个都知道。什么是教频繁呢?分析你执行的全部SQL语句。最好将他们一个个都列出来。而后分析,发现其中有些字段在大部分的SQL语句查询时候都会用到,那么就果断为他创建索引。htm
二、惟一性太差的字段不适合创建索引排序
什么是惟一性太差的字段。如状态字段、类型字段。那些只存储固定几个值的字段,例如用户登陆状态、消息的status等。这个涉及到了索引扫描的特性。例如:经过索引查找键值为A和B的某些数据,经过A找到某条相符合的数据,这条数据在X页上面,而后继续扫描,又发现符合A的数据出如今了Y页上面,那么存储引擎就会丢弃X页面的数据,而后存储Y页面上的数据,一直到查找完全部对应A的数据,而后查找B字段,发现X页面上面又有对应B字段的数据,那么他就会再次扫描X页面,等于X页面就会被扫描2次甚至屡次。以此类推,因此同一个数据页可能会被屡次重复的读取,丢弃,在读取,这无疑给存储引擎极大地增长了IO的负担。索引
三、更新太频繁地字段不适合建立索引内存
当你为这个字段建立索引时候,当你再次更新这个字段数据时,数据库会自动更新他的索引,因此当这个字段更新太频繁地时候那么就是不断的更新索引,性能的影响可想而知。大概被检索几十次会更新一次的字段才比较符合创建索引的规范。而若是一个字段同一个时间段内被更新屡次,那么果断不能为他创建索引。资源
四、不会出如今where条件中的字段不应创建索引get
这个相信你们都知道。效率