索引的作用

 数据库中现在有一百万条记录,现在要执行这样一个查询:select * from GoodsInfo where Id=645853。如果没有索引,必须遍历整个表,直到Id等于645853的这一行被找到为止;如果在Id列上创建索引,SQL Server不需要任何扫描,直接在索引里面找645853,就可以得知这一行的位置。可见,索引的建立可以加快数据库的查询速度。

 索引的分类

不同数据库中提供了不同的索引类型,SQL Server中的索引有两种:聚集索引和非聚集索引。聚集索引和非聚集索引的区别是在物理数据的存储方式上。

 索引的设计原则

(1)索引并非越多越好,一个表中如果有大量的索引,不仅占用大量的磁盘空间,而且会影响INSERT、DELETE、UPDATE等语句的性能。因为当表中数据更改的同时,索引也会进行调整和更新。
(2)避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。而对经常用于查询的字段应该创建索引,但要避免添加不必要的字段。
(3)数据量小的表最好不要使用索引,由于数据较少,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果。
(4)在条件表达式中经常用到的、不同值较多的列上建立索引,在不同值少的列上不要建立索引。比如在学生表的“性别”字段上只有“男”与“女”两个不同值,因此就无须建立索引。如果建立索引,不但不会提高查询效率,反而会严重降低更新速度。
(5)当唯一性是某种数据本身的特征时,指定唯一索引。使用唯一索引能够确保定义的列的数据完整性,提高查询速度。
(6)在频繁进行排序或分组(即进行GROUP BY或ORDER BY操作)的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。
 

来看一下索引的作用:

sql server建立索引让查询速度变快 sql索引的建立与使用_索引

这是没有添加索引,消耗了37毫秒,接下把GoodsInfo这张表的Id设置成聚集索引

sql server建立索引让查询速度变快 sql索引的建立与使用_字段_02

在执行查询

sql server建立索引让查询速度变快 sql索引的建立与使用_字段_03

这次消耗的时间低于1毫秒,查询速度有了明显的提升