索引的创建和数据表的创建同样的重要,都是系统性能的基石,索引没有创建好性能不但不能提高,还会造成系统资源的严重浪费,维护索引对于DB来说,开销还是很高的,甚至
超过了表本身的数据。所以,对于任何一个索引的创建,都要有非常充分的理由。
使用索引的时候通常要注意以下一些细节:
1. 是否有查询用这个索引字段,没有的话绝对不能乱加
2. 该表的数据量多大,如果只有少量数据,比如几十条数据的话,就没有必要加索引
3. 通过这个索引查询返回的数据量多大,如果超过总量10%,或者说比较多的话如10000条,则不能加索引;索引通常用于少量数据返回
4. 字段是否是外键,外键还是需要添加索引的,能加快完整性维护的速度,除非外键指向的表很小
5. 频繁更新,插入,删除的表不建议用索引,如日期流水型的表
6. 有时有必要使用聚集索引,如果给查询结果集的字段加上索引,那么这个查询可能不用访问表,只访问索引就行了,查询执行速度会很快,不过这招慎用,因为响应修改速度会变慢
7. 给几个字段创建的复合索引,字段顺序很关键,越常用的字段排越前,这样可以尽可能让使用部分字段查询的语句,也能公用到这个索引,而不需重新创建
8. 采用索引的字段进行查询的时候,不能同时进行函数操作,这样会让查询忽略掉这个索引。 如果是发生在修改的语句中,那么行锁会上升到表锁
9. 索引的字段进行查询的时候,避免值的自动转换,如: name=123 name='123',如果类型没有匹配,那么会发生自动转换,导致索引被忽略
超过了表本身的数据。所以,对于任何一个索引的创建,都要有非常充分的理由。
使用索引的时候通常要注意以下一些细节:
1. 是否有查询用这个索引字段,没有的话绝对不能乱加
2. 该表的数据量多大,如果只有少量数据,比如几十条数据的话,就没有必要加索引
3. 通过这个索引查询返回的数据量多大,如果超过总量10%,或者说比较多的话如10000条,则不能加索引;索引通常用于少量数据返回
4. 字段是否是外键,外键还是需要添加索引的,能加快完整性维护的速度,除非外键指向的表很小
5. 频繁更新,插入,删除的表不建议用索引,如日期流水型的表
6. 有时有必要使用聚集索引,如果给查询结果集的字段加上索引,那么这个查询可能不用访问表,只访问索引就行了,查询执行速度会很快,不过这招慎用,因为响应修改速度会变慢
7. 给几个字段创建的复合索引,字段顺序很关键,越常用的字段排越前,这样可以尽可能让使用部分字段查询的语句,也能公用到这个索引,而不需重新创建
8. 采用索引的字段进行查询的时候,不能同时进行函数操作,这样会让查询忽略掉这个索引。 如果是发生在修改的语句中,那么行锁会上升到表锁
9. 索引的字段进行查询的时候,避免值的自动转换,如: name=123 name='123',如果类型没有匹配,那么会发生自动转换,导致索引被忽略