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