什么是索引,有什么优势?

答:索引象书的目录相似,索引使数据库程序无需扫描整个表,就能够在其中找到所须要的数据,索引包含了一个表中包含值的列表,其中包含了各个值的行所存储的位置,索引能够是单个或一组列,索引提供的表中数据的逻辑位置,合理划分索引可以大大提升数据库性能。数据库

索引的概念性能

索引的用途:咱们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度一般是最广泛采用的优化方法。优化

索引是什么:数据库中的索引相似于一本书的目录,在一本书中使用目录能够快速找到你想要的信息,而不须要读彻底书。在数据库中,数据库程序使用索引能够重啊到表中的数据,而没必要扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。spa

索引的利弊:查询执行的大部分开销是I/O,使用索引提升性能的一个主要目标是避免全表扫描,由于全表扫描须要从磁盘上读取表的每个数据页,若是有索引指向数据值,则查询只须要读少数次的磁盘就行啦。因此合理的使用索引能加速数据的查询。可是索引并不老是提升系统的性能,带索引的表须要在数据库中占用更多的存储空间,一样用来增删数据的命令运行时间以及维护索引所需的处理时间会更长。因此咱们要合理使用索引,及时更新去除次优索引。code

语法:排序

CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED ]
INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )
[with[PAD_INDEX][[,]FILLFACTOR=fillfactor]
[[,]IGNORE_DUP_KEY]
[[,]DROP_EXISTING]
[[,]STATISTICS_NORECOMPUTE]
[[,]SORT_IN_TEMPDB]
]
[ ON filegroup ]

CREATE INDEX命令建立索引各参数说明以下:索引

UNIQUE:用于指定为表或视图建立惟一索引,即不容许存在索引值相同的两行。
CLUSTERED:用于指定建立的索引为汇集索引。
NONCLUSTERED:用于指定建立的索引为非汇集索引。
index_name:用于指定所建立的索引的名称。
table:用于指定建立索引的表的名称。
view:用于指定建立索引的视图的名称。
ASC|DESC:用于指定具体某个索引列的升序或降序排序方向。
Column:用于指定被索引的列。
PAD_INDEX:用于指定索引中间级中每一个页(节点)上保持开放的空间。
FILLFACTOR = fillfactor:用于指定在建立索引时,每一个索引页的数据占索引页大小的百分比,fillfactor的值为1到100。
IGNORE_DUP_KEY:用于控制当往包含于一个惟一汇集索引中的列中插入重复数据时SQL Server所做的反应。
DROP_EXISTING:用于指定应删除并从新建立已命名的先前存在的汇集索引或者非汇集索引。
STATISTICS_NORECOMPUTE:用于指定过时的索引统计不会自动从新计算。
SORT_IN_TEMPDB:用于指定建立索引时的中间排序结果将存储在 tempdb 数据库中。
ON filegroup:用于指定存放索引的文件组。ip

索引的建立与销毁it

CREATE INDEX 关键字/DROP INDEX

基本语法:table

CREATE INDEX index_name ON table_name (列名1,列名2,......);

示例:

学生信息表:

clipboard.png

招生信息表:

clipboard.png

院系信息表:

clipboard.png

示例1:为StudentInfo表中的sname字段建立非簇索引

CREATE INDEX Name_Index ON StudentInfo(sname)

查询:

SELECT sname FROM StudentInfo

结果:

clipboard.png

强制使用Name_Index索引:

SELECT * FROM StudentInfo WITH (INDEX(Name_Index))

clipboard.png

使用ORDER BY关键字

SELECT * FROM StudentInfo ORDER BY sname

clipboard.png

虽然从表面上看,SELECT * FROM ...ORDER BY 获得了相同的结果,可是,两者从本质上有很大的区别。ORDER BY关键字在每次查询数据时,都要对数据进行排序。而建立索引后,数据库系统实际上建立了一个索引结构体,用户每次使用查询数据时,都是用相同的索引结构,从而节省了时间。

复合索引

CREATE INDEX SexName_Index ON StudentInfo(sex,sname);

强制使用该索引

SELECT * FROM StudentInfo WITH (INDEX(SexName_Index))

clipboard.png

在建立多字段索引时,各字段的排列顺序决定了其优先级,排名越靠前,具备越高的优先级。

惟一索引:指不容许在两行中存在相同的索引值

CREATE UNIQUE INDEX Sno_Index ON StudentInfo (sno DESC)

强制使用该索引

SELECT * FROM StudentInfo WITH (INDEX(Sno_Index))

clipboard.png

具备重复值字段的惟一性索引

CREATE UNIQUE INDEX Address_Index ON StudentInfo (address)

结果:

clipboard.png

簇索引

CREATE CLUSTERED INDEX Snameclester_Index ON StudentInfo (sname)
DROP INDEX StudentInfo.Snameclester_Index
CREATE CLUSTERED INDEX SexAddrssClustered_Index ON StudentInfo(sex,address)
相关文章
相关标签/搜索