原文地址:https://www.cnblogs.com/CareySon/archive/2011/12/22/2297568.html
索引:是对数据库中一列或者多列数据进行排序的结构,使用所以可提升查询的速度,但是会影响新增、修改和删除的速度
SQL SERVER中索引和表一样是是B树的方式存储的,每增加一个索引都会增加一个树状空间,B树结构:
索引分聚集索引和非聚集索引。
聚集索引的特点:
1.聚集索引的叶子节点就是实际的数据页
2.行的物理位置和行在索引中的位置是相同的
3.每个表只有一个聚集索引
4.聚集索引的平均大小大约为表大小的5%左右
5.主键不一定就是聚集索引
聚集索引结构:
聚集索引物理顺序和逻辑顺序一致:
创建非聚集索引的主键:
非聚集索引特点:
1.非聚集索引的页,不是数据,而是指向数据页的页(叶子节点是对于其所在表的引用分为两种,如果其所在表上没有聚集索引,则引用行号。如果其所在表上已经有了聚集索引,则引用聚集索引的页)。
2.若未指定索引类型,则默认为非聚集索引
3.叶节点页的次序和表的物理存储次序不同
4.每个表最多可以有249个非聚集索引
5.在非聚集索引创建之前创建聚集索引(否则会引发索引重建)
非聚集索引的结构:
非聚集索引和聚集索引额关系:
索引的代价:
1.影响新增、修改、删除的效率
2.非聚集索引需要额外的磁盘空间
3.不恰当的非聚集索引反而会降低性能
4.当随着数据量的增长,产生了索引碎片后,很多存储的数据进行了不适当的跨页,会造成碎片(关于跨页和碎片以及填充因子的介绍,我会在后续文章中说到)我们需要重新建立索引以加快性能