【SQL Server】索引介绍及创建索引
1.索引的作用
索引是最普遍的系统优化方式,是衡量应用系统成败的标准,优化的内容包括数据的查询和处理速度。
2.索引是什么
索引就相当于目录,通过其可以快速地定位我们要查找的数据,而不必去扫描整个表。从而可以加速我们查询的速度,提高系统的性能。
3.索引有弊端吗
他会占用一定存储空间,索引并不是越多越好,索引并不总是提高系统性能。举一个例子,一本书就几页的情况下,再多加一页为其做一个目录,显然是没有必要的。
4.创建索引的目的
可以更加快速高效的查询数据,减少系统的响应时间。
5.索引分类
索引分为聚集索引和非聚集索引
主键为聚集索引,唯一索引为非聚集索引
聚集索引:Clustered,逻辑顺序与物理顺序是一致的。最多只能有一个,可以没有。
非聚集索引:NonClustered,逻辑顺序与物理顺序是并不一致的。可以有多个,可以没有。
聚集索引比非聚集索引的效率更高。
补充
-
如果需要多个列上建立索引,可以为这些列建立组合索引。
-
最好建立索引的列选择小数据类型的,访问速度特别快。
-
索引是看不见的,如果你创建了索引,在查询大数据的时候,它的优势是显而易见的。
脚本创建索引
在设置主键时就会自动设置为聚集索引,设置唯一键时就会自动设置为唯一非聚集索引,所以这两个索引一般不手动建立,多是建立组合索引。
1)聚集的主键索引
--默认非聚集索引,否则需要index前加clustered
--聚集的主键索引
create clustered index 索引名
on 表名(列名)
with
(
drop_existing=on --该选项为on时,意为如果表没有索引,则建立失败,如果表上存在索引,就将其删掉,再重新建立一个;若为off,意为如果表没有索引,就建立一个,如果表上存在索引就会重建建立索引失败并提示错误。
)
2)唯一非聚集索引
--唯一非聚集索引
create unique nonclustered index 索引名
on 表名(列名)
with
(
pad_index=on, --使用填充。若没有fillfactor,则其没有意义
fillfactor=50, --用于指定创建索引时,每个索引页的数据占索引页大小的百分比。
ignore_dup_key=on --若为on,向唯一索引插入一个重复值时,出现一个警告,只有违反唯一性约束才会失败,
--若为off,若出现错误信息,整个信息都会回滚,设置on避免重复键插入,只有违反约束才会失败
)
--读写比为100:1
--读小于写:fillfactor设置50-70
--读写各一半:fillfator设置到80-90
3)复合索引
--复合索引,多个列上建立的索引
create nonclustered index 索引名
on 表名(列名1,列名2...)
with
(
drop_existing=on
)