SQL server (六)索引

索引

索引的基本概念

SQL Server的索引是对数据库表中一个或多个列的值进行排序的结构。索引有助于更快的获取信息。是用来定位的。

索引的所用

  1. 加快数据检索
  2. 保证数据的一致性
  3. 实现表与表之间的参照完整性
  4. 在使用GROUP BY、ORDER BY子句进行查询时,利用索引可以减少排序和分组的时间

索引的代价

  1. 创建索引需要占用数据空间并花费一定的时间
  2. 建立索引会减慢数据修改速度
  3. 创建索引要消耗一定的系统性能

选择创建索引的数据列:

  1. 定义有主键和外键的列
  2. 在指定范围中快速或频繁查询的列
  3. 连接中频繁使用的列
  4. 需要按排序顺序快速或频繁检索的列

索引的类型

按索引的组织方式不同

  1. 聚集索引

聚集索引确定表中数据的物理顺序,当以某字段作为关键字建立聚集索引时,表中数据以该字段作为排序根据。即索引的顺序决定了表中行的存储顺序,因此每个表中只能有一个聚集索引

  1. 非聚集索引

非聚集索引并不在物理上排列数据,即索引中的逻辑顺序并不等同于表中行的物理顺序,索引仅仅记录指向表中行的位置的指针,这些指针本身是有序的,通过这些指针可以在表中快速地定位数据

设计准则

  1. 避免对经常更新的表进行过多的索引,并且索引应保持较窄。
  2. 使用多个索引可以提高更新少而数据量大的查询的性能。
  3. 对小表进行索引可能不会产生优化效果。

创建索引

  1. 创建主键约束或唯一约束时,系统将自动的为建有这些约束的列创建聚集索引。
  2. 当删除主键约束或唯一约束时,这些列上创建的聚集索引也会被自动删除。
  3. SQL Server默认使用非聚集索引。
  4. 在同一个表建立聚集索引和非聚集索引时,应先建立聚集索引。
  5. 若先建立非聚集索引,在建立聚集索引时,系统会自动将非聚集索引删除,然后再重新建立非聚集索引。
  6. 当现有的聚集索引被删除时,系统将自动重建现有的非聚集索引。

CREATE [UNIQUE]

[CLUSTERED | NONCLUSTERED ] INDEX index_name

ON 表名 (column [, ...n])

UNIQUE:唯一索引,这一列的值不能重复,但可以为空

CLUSTERED:聚集索引

NONCLUSTERED:非聚集索引

index_name:索引的名称

column :索引所基于的一列或多列

--非聚集索引
CREATE NONCLUSTERED INDEX index_Sage
ON Student(Sage)

--聚集索引
CREATE UNIQUE CLUSTERED INDEX index_Sno
ON Student(Sno)

删除索引

DROP INDEX 表名(或视图名).索引名

--删除索引
DROP INDEX Student.index_Sage

删除主键的聚集索引需要先解除主键约束

posted @ 2021-05-26 18:17  sxkio  阅读(808)  评论(0编辑  收藏  举报