数据库索引系列二:什么情况增加索引
2017-02-17 20:02
302 查看
索引可以大大提高系统的性能,但同时也会降低更新的效率和占用更多的空间。那么,在创建索引之前,我们就要考虑一下,在哪些列上可以创建索引,在哪些列上不能创建索引。
(一)一般来说,应该在这些列上创建索引:
1. 在经常需要搜索的列上,可以加快搜索的速度;
2. 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
3. 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
4. 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
5. 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
6. 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
(二)同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:
1. 对于那些在查询中很少使用或者参考的列不应该创建索引。
2. 对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
3. 对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
4. 当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。
(一)一般来说,应该在这些列上创建索引:
1. 在经常需要搜索的列上,可以加快搜索的速度;
2. 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
3. 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
4. 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
5. 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
6. 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
(二)同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:
1. 对于那些在查询中很少使用或者参考的列不应该创建索引。
2. 对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
3. 对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
4. 当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。
相关文章推荐
- 数据库中索引的结构和什么情况下不适合建索引,数据库索引是如何实现的?
- 什么情况下应该建立索引,索引优化及分析
- 什么情况导致全表扫描,而不是用索引 收藏
- 什么情况下使用聚集索引或非聚集索引
- 数据库调优教程(八) 什么情况下不要使用索引
- 什么情况下使用全局索引和本地索引
- SQL SERVER中什么情况会导致索引查找变成索引扫描
- 什么情况下应该建立索引,索引优化及分析
- 什么情况下使用全局索引和本地索引
- 搜索引擎系列1:什么是正向索引?什么是倒排索引?
- 数据库的索引,mysql中的索引|||如何在mysql中对text字段加索引?|||mysql数据库中的字段在什么情况下加索引?|||高手请进:text字段不能做索引,有无其他方法?|||该建那个字段
- 《Oracle编程艺术》学习笔记(31)-什么情况下适合使用B*树索引
- 索引在什么情况下失去作用
- 什么情况下应该建立索引 索引优化及分析
- 转]什么情况下应该建立索引 索引优化及分析
- 什么情况下oracle的索引用不到
- 复合索引在什么情况下使用
- 什么情况下需要创建MySQL索引?
- 数据库调优教程(八) 什么情况下不要使用索引
- 什么情况导致全表扫描,而不是用索引