索引
索引是某个表中一列或多个列值的组合和相应的指向表中物理标识这些值的数据页的逻辑指针的清单。它就像书的目录,使得在数据库中,程序无须对整个表进行扫描,就可以快速地查找需要的数据。
索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据的存储位置的指针,索引需要占用数据库空间。它还可以强制数据具有唯一性,以保证数据完整性。
需要说明的是,虽然索引可以提高查询数据的效率,但是,当对相关数据做DML操作时,会引起相关的索引重建,重建索引需要时间,因此,过多的索引可能会增加数据库DML操作的时间,这里不建议对数据量小的表或数据改动频繁的表使用索引(除非有必要)。
在SQL Server中可以分为以下几种索引:
1.唯一索引
此类索引表示表中每一个索引值只对应唯一的相关数据,由于它和主键的功能类似,所以,唯一索引常用于主键列中。
2.聚集索引
它会根据聚集索引键的顺序来存储表或视图中的数据,即对表的物理数据按索引键值的顺序进行排序,然后再重新存储到磁盘上。聚集索引与数据是混为一体的,它的叶节点中存储的是实际的数据。类似电话薄,每个表只允许有一个聚集索引,但该索引可以包含多个列。聚集索引对搜索范围值的列特别有效。例如对日期列进行搜索可以利用聚集索引完成,它会快速地定位开始日期,然后对表中的相邻行进行索引,直到结束行。该类索引适用的情况主要有以下几种:
● 当利用BETWEEN,>,>=,<或<=返回一个范围值时。
● 含有大量的非重复值的列。
● 被访问的列是连续的。
● 经常被使用连接或GROUP BY子句的查询访问的列。
注意:定义聚集索引键时使用的列越少越好,否则将会很耗费磁盘空间。
3.非聚集索引
该索引中索引键值的顺序与磁盘上行的物理存储顺序不同。查询优化器在搜索数据值时,先搜索非聚集索引以找到数据值在表中的位置,然后直接从该位置检索数据。这使非聚集索引成为完全匹配查询的最佳选择,因为索引包含说明查询所搜索的数据值在表中的精确位置的项。
说明:当表中有被设置为唯一的列时,SQL Server会自动建立一个非聚集的唯一性索引。而当表中有主键约束时,SQL Server会在主键建立一个聚集索引。。
索引在数据库中发挥着重要的作用,主要表现在以下几个方面: