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 :索引所基于的一列或多列

1  --非聚集索引
2  CREATE NONCLUSTERED INDEX index_Sage
3  ON Student(Sage)
4  ?
5  --聚集索引
6  CREATE UNIQUE CLUSTERED INDEX index_Sno
7  ON Student(Sno)

 

删除索引

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

1  --删除索引
2  DROP INDEX Student.index_Sage

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



SQL server (六)索引

上一篇:MySQL的B+Tree索引到底是咋回事?聚簇索引到底是如何长高的?


下一篇:mysql ON DUPLICATE KEY UPDATE