1 索引基础
索引是一种存储结构,主要以B-Tree形式存储信息。通过这种存储格式,sqlserver优化器可以通过最少的I/O次数获取所需的数据,并返回客户端。当然,sqlserver可以完全不用索引,但是基于索引所具有的强大功能,不建议不用索引。
2 索引的主要类型
2.1 堆:准确来说,堆不是索引,但是它和索引有紧密的联系,所以这里还是把它分到索引范畴。堆的定义就是一堆数据,堆是有顺序的,在没有改动的情况下,它的顺序就是数据插入时的顺序。但是由于堆没有一种严密的组织方式,因此一旦数据改动(update,delete),数据的顺序就会发生改变,而且不容易组织。所以没有聚集索引的数据表都称为堆表。即使上面有非聚集索引,也还是堆表。
2.2 聚集索引:每个表只能有一个聚集索引,通过create clustered index来创建,能使表按照创建是的首列顺序存放数据。
2.3 非聚集索引:sqlserver2008可以在单表上创建多达999个非聚集索引,它和聚集索引一样,是B-Tree结构,但是并不影响数据存储。只有堆和聚集索引才影响数据的存储。绝大部分的索引变种都是非聚集索引。
2.4 列存储索引:它是从sqlserver2012开始引入的一种索引类型,主要目的是用于应对大数据量的查询操作。通过与传统索引(行存储)不一样的存储结构,在某些情况下,可以大大提升索引的效率。
2.5特殊索引:sqlserver除了上面所说的索引类型之外,还有xml索引、空间索引、全文索引等其他非聚集索引的变种。
2.6 索引其他类型:索引不是只有“index”,还包含一些变种,比如:主键、唯一索引、包含索引、分区索引、过滤索引等。