sqlServer-索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlServer-索引相关的知识,希望对你有一定的参考价值。
在关系型数据库中,索引是一种单独的,物理的对数据库表中一列或多列的值进行排序的一种存储结构。
索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
当表中有大量记录时,若要对表进行查询,
第一种搜索信息方式是全表搜索,就是将所有记录一一取出,然后和查询条件一一进行对比,返回满足条件的记录。但是这样做会消耗大量的数据库系统时间,并造成大量磁盘I/O操作
第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录
索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。
索引的作用
1、快速取数据
2、保证数据记录的唯一性
3、实现表与表之间的参照完整性
4、在使用order by、group by子句进行检索时,利用索引可以减少排序和分组的时间
优点
1、大大加快索引的检索速度
2、创建唯一性索引,保证数据库表中每一行数据的唯一性
3、加速表与表之间的连接
4、在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间
缺点
1、索引需要占用物理空间
2、当对表中的数据进行增删改操作时,索引也要动态的维护,降低了数据的维护速度
索引类型
无论是聚集索引还是非聚集索引,都是将信息存储在平衡树或B-树中。B-树将具有类似键的记录组合起来,正是由于B-树中的检索基于键值,因此索引可以提升数据访问的速度
聚集索引
每张表或者视图只能包含一个聚集索引,这是因为聚集索引改变了数据存储和排列的方式
在B-树中,每一页被称为一个节点,每个索引均有单独的一个根节点,也就是检索开始的地方
每个索引行中包含一个键值与一个指针,这些键值即在创建索引时所包含的列,而指针则是树中各层之间的连接,指针可以指向中间层,也可以指向叶节点。指针指向何处取决于所银行的大小与表中行的数量
如果创建了一个很大聚集索引,包含许多键列,那么一页中能够包含的键将更少,从而使得页的数量增加,而且层级也将更多。
建议选择较小的键值范围,从而尽可能减少中间层的页数。因此,在创建聚集索引时,整型是不错的选择,尤其在使用标识列时
不包含聚集索引的表被称为堆。存储在堆中的数据没有进行任何有序的组织,因为返回数据的速度较慢。
建议为数据库的所有表均添加一个合适的聚集索引
非聚集索引
结构与聚集索引结构类似,也有根与叶节点层。但是,非聚集索引中的叶节点包含的是索引行而非数据行,该索引为指向数据行的标签。
而在聚集索引中,叶节点包含的是数据行,由于非聚集索引中不包含任何数据,所以它对数据的储存和排序不会产生任何影响。因此在单张表上可以有多个非聚集索引
列存储结构
该功能只能在sql server企业版中可用,传统索引将数据行存储在连续的页中,而列存储索引每次对一列的数据进行分组并连续地存储在页面集合中。
该结构并未将全部数据存储在同一结构中,而是把数据水平分成若干个行组,这在一个列存储结构中被称作段,一个段包含每行指定列的所有值,段又被分成不同的行组,具有相同行集的段被存储在一个行组中。
只要一张表中有列存储索引,就不能更新这张表。所以, 列存储结构一般只用于数据仓库中
以上是关于sqlServer-索引的主要内容,如果未能解决你的问题,请参考以下文章