1.索引概念
索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 索引包含由表或视图中的一列或多列生成的键。 这些键存储在一个结构(B 树)中,使 SQL Server 可以快速高效地找到与键值关联的行。
2.索引种类
2.1聚集索引
聚集索引,你逻辑上怎么创建的,在物理存储中就是怎么创建的。
每个表只能有一个聚集索引
一般情况下,定义聚集索引键时使用的列越少越好。
适用情况:
唯一或包含许多不重复的值。
按顺序被访问。
定义为 IDENTITY。
经常用于对表中检索到的数据进行排序。
不适用情况:
- 频繁更改的列
这将导致整行移动,因为数据库引擎必须按物理顺序保留行中的数据值。 这一点要特别注意,因为在大容量事务处理系统中数据通常是可变的。
- 宽键
宽键是若干列或若干大型列的组合。 所有非聚集索引将聚集索引中的键值用作查找键。 为同一表定义的任何非聚集索引都将增大许多,这是因为非聚集索引项包含聚集键,同时也包含为此非聚集索引定义的键列。
2.2非聚集索引
可以对表或索引视图创建多个非聚集索引
索引理解为一种特殊的目录,目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。
适用于:
- 某列常用于集合函数(如Sum,…)。
- 覆盖查询。
- 大量非重复值,如姓氏和名字的组合(前提是聚集索引被用于其他列)。
- 查寻出的数据不超过表中数据量的20%。
2.3唯一索引
此索引保证索引中不包含重复的值,从而使表中每一行在某种意义上也是具有唯一性的
只有当唯一性是数据本身的特征时,指定唯一索引才有意义。
聚集索引和非聚集索引都可以是唯一的。 只要列中的数据是唯一的,就可以为同一个表创建一个唯一聚集索引和多个唯一非聚集索引。
优点:
- 能够确保定义的列的数据完整性。
- 提供了对查询优化器有用的附加信息。
2.4主键索引
主键索引是唯一索引的特殊类型。主键是索引,但索引不一定是主键。
以主键基础建立的一个索引,为表定义一个主键时就自动为表创建了主键索引
3.建立索引
类似于表的创建,索引英文是index,所以
create [unique] [clustered|nonclustered] index 索引名字 on 表名 / 视图名 ( 索引字段 [desc|asc] …)
unique :表示索引内每个索引值对应唯一的数据
clustered :表示索引是聚集索引
nonclustered :即表示索引不是聚集索引
- 以上都是可选项
- 后面的索引字段表示索引按索引字段进行何种排序,可选项
- 多个索引字段用英文逗号" , "隔开
4.管理索引
//注意:[]表示可选项
Exec sp_helpindex 表名
--查看索引定义
Exec sp_rename '表名.旧索引名','新索引名'[,' 对象类型']
--将索引名由'旧索引名'改为'新索引名',[赋予新的类型]
drop index 表名.索引名
--删除表中的相关索引
dbcc showcontig(表名, 索引名)
--检查表中索引目标索引的碎片信息
dbcc indexdefrag(数据库名, 表名, 索引名)
--整理目标数据库中目标表的目标索引上的碎片
update statistics 表名
--更新目标表中的全部索引的统计信息