紊乱的数据库叫做堆
创建一个物理索引,使数据基于某一个键聚集在一起。堆和聚集索引是数据页存在的两种方式。
堆
堆就好比没有排序过的数据页,没有索引的自然状态,每个表都是组织在堆中。当表需要更多的数据,他会让堆扩展使之再分配,增加在堆上的页数。这是非常有效的,这样,数据库可以存放数据在任何空当,而不是只能存放在指定的地方。
表数据在堆中,没有经过排序。当你在一个堆中的表里查询数据,数据引擎必须检查堆中的每个页,以此判断是否满足查询,这个读取表的每个页面的过程叫做全表扫描。大多数表,进行全表扫描是非常耗性能的。解决的方法就是使用索引。
索引结构
索引在sqlserver中使用平衡树(balanced tree),有时被称作B树,平衡树索引形成树结构,索引的数据在这几组页上面(叶子节点)。这种结构叫做平衡树因为每个叶子到根的距离都是一致的。
有两种相关的索引使用了平衡树结构。第一种叫做聚集索引。这种索引呈现了数据表中数据的物理排序次序,每个表只能有一个聚集索引,第二种叫做非聚集索引,这种索引在每个页上构建了一个排序关键字,所以他不是直接影响到数据页的组织方式。因为这个,你可以在表上有多个非聚集索引。
聚集索引的叶节点(最底层的节点)包含了数据页。
非聚集索引的叶节点(最底层的节点)不包含数据页,仍然是个索引页。
看下图:聚集索引示意图。根结点和叶节点中间的索引级别统称中间级。最后的叶节点包含了数据页。
看下图,非聚集索引。叶节点仍然是索引页。并且非聚集索引的排序顺序和物理顺序无关。当SQLserver到达非聚集索引的底部节点后,他就开始使用聚集索引来搜寻实际的数据行。这就增加了一些IO开销,但是好处是,如果数据行被更改了,非聚集索引行定位仍然不变。
当在非聚集索引上搜索到最后的叶子节点后,要找的数据页,仍然使用聚集索引。
本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/574782,如需转载请自行联系原作者