索引的使用有利有弊,需要总结一下,故找了一下资料总结了一下。
定义(部分定义来源于 SQL Server 联机丛书):
索引:与书中的索引一样,数据库中的索引使您可以快速找到表或索引视图中的特定信息。索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针。
聚集索引:聚集索引基于聚集索引键按顺序排序和存储表或视图中的数据行。聚集索引按 B 树索引结构实现,B 树索引结构支持基于聚集索引键值对行进行快速检索。
非聚集索引:既可以使用聚集索引来为表或视图定义非聚集索引,也可以根据堆来定义非聚集索引。非聚集索引中的每个索引行都包含非聚集键值和行定位符。此定位符指向聚集索引或堆中包含该键值的数据行。索引中的行按索引键值的顺序存储,但是不保证数据行按任何特定顺序存储,除非对表创建聚集索引。
唯一索引:唯一索引确保索引键不包含重复的值,因此,表或视图中的每一行在某种程度上是唯一的。聚集索引和非聚集索引都可以是唯一索引。
包含列索引:一种非聚集索引,它扩展后不仅包含键列,还包含非键列。
原理分析:
是否使用索引以及使用哪种索引,其实就是需要我们在 INSERT、DELETE、UPDATE、MERGE 和 SELECT 等命令之中进行性能上的权衡。因为在执行 INSERT、DELETE、UPDATE、MERGE 命令的时候是需要花时间和资源进行索引的维护的,所以并不是说加索引就能提高性能,这个是需要根据数据的实际使用而定的。
聚集索引和非聚集索引的不同如下:
聚集索引 | 非聚集索引 |
索引与数据保存在同一个地方 | 索引与数据保存在不同的地方 |
一个表只能有一个聚集索引 | 一个表可以有多个非聚集索引 |
数据的保存顺序与索引一致 | 索引的保存顺序与数据不同 |
不能添加包含列 | 可以添加包含列 |
覆盖查询
使用索引的最佳实践指南:
1、
2、