SQL server (六)索引
索引
索引的基本概念
SQL Server的索引是对数据库表中一个或多个列的值进行排序的结构。索引有助于更快的获取信息。是用来定位的。
索引的所用
- 加快数据检索
- 保证数据的一致性
- 实现表与表之间的参照完整性
- 在使用GROUP BY、ORDER BY子句进行查询时,利用索引可以减少排序和分组的时间
索引的代价
- 创建索引需要占用数据空间并花费一定的时间
- 建立索引会减慢数据修改速度
- 创建索引要消耗一定的系统性能
选择创建索引的数据列:
- 定义有主键和外键的列
- 在指定范围中快速或频繁查询的列
- 连接中频繁使用的列
- 需要按排序顺序快速或频繁检索的列
索引的类型
按索引的组织方式不同
- 聚集索引
聚集索引确定表中数据的物理顺序,当以某字段作为关键字建立聚集索引时,表中数据以该字段作为排序根据。即索引的顺序决定了表中行的存储顺序,因此每个表中只能有一个聚集索引。
- 非聚集索引
非聚集索引并不在物理上排列数据,即索引中的逻辑顺序并不等同于表中行的物理顺序,索引仅仅记录指向表中行的位置的指针,这些指针本身是有序的,通过这些指针可以在表中快速地定位数据。
设计准则
- 避免对经常更新的表进行过多的索引,并且索引应保持较窄。
- 使用多个索引可以提高更新少而数据量大的查询的性能。
- 对小表进行索引可能不会产生优化效果。
创建索引
- 创建主键约束或唯一约束时,系统将自动的为建有这些约束的列创建聚集索引。
- 当删除主键约束或唯一约束时,这些列上创建的聚集索引也会被自动删除。
- SQL Server默认使用非聚集索引。
- 在同一个表建立聚集索引和非聚集索引时,应先建立聚集索引。
- 若先建立非聚集索引,在建立聚集索引时,系统会自动将非聚集索引删除,然后再重新建立非聚集索引。
- 当现有的聚集索引被删除时,系统将自动重建现有的非聚集索引。
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
删除主键的聚集索引需要先解除主键约束