索引
1.什么是索引?
索引是与表或视图关联的独立的、物理的数据库结构,可以加快从表或视图中检检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B树)中,是SQLServer可以快速有效地查找与键值关联的行。
数据库中的索引与书籍的目录非常相似,在数据库中索引使数据库程序无需对整个表进行扫描,就可以找到所需数据,数据库索引是一列或多列生成的键。
2.索引的作用
索引的作用就是为了提高数据库从表或视图中查询数据的速度,改善数据库性能。索引页需要空间来存放这些键,这些存放索引的空间在数据库中称为索引页。
索引页:数据库中存储索引的数据页,存放键值以及指向数据行位置的指针。
3.索引分类:索引可以分为三类:唯一索引、聚集索引、非聚集索引
1)唯一索引:不允许有两行相同的索引值,所以唯一所以一般在主键或创建了唯一约束的列上创建。当在列上创建了唯一约束后,将自动在此列上创建一个唯一索引。
2)聚集索引:聚集索引根据数据行的键值在表或视图中排序和存储这些数据行,即表中行的物理顺序与索引顺序相同。每个表只能有一个聚集索引,因为数据行本身只能按照一个顺序排序。如果表具有聚集索引,则改变成为聚集表,表中的数据行按索引顺序进行排序;如果表中没有聚集索引,则其数据行存储在一个称为堆的无序结构中。
3)非聚集索引:非聚集索引具有独立于数据行的结构。非聚集索引宝航非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。从非聚集索引中的索引行指向数据行的指针称为行定位器,行定位器的结构取决于数据页是存储在堆中还是数据表中。对于堆,行定位器是指向行的指针;对于聚集表,行定位器是聚集索引键。每个表可以有多个非聚集索引。
索引可以减少为返回查询结果集而必须读取的数据量,还可以强制表中的行具有唯一性,从而确保表数据的完整性。
2.如何创建索引?
创建索引的两种方式:使用SQLServerManagementStudio和使用T-SQL语句。
1)使用SQLServerManagementStudio创建索引。
2)使用T-SQL语句创建索引。
语法:
Create[UNIQUE][CLUSTERED|NOCLUSTERED]INDEXindexnameONtablename
(columnname[,columnname]……)
[WITHFILLFACTOR=x]
语法说明:UNIQUE指定创建的是唯一索引,可选项。CLUSTERED、NOCLUSTERED指定是聚集索引还是非聚集索引,可选项。indexname表示索引名,索引的命名规范是“ix_表名称_列名称”。FILLFACTOR表示填充因子,用来设置索引页数据填充的空间百分比,即每个索引页的剩余空间。指定值范围是0~~100,假如取值为70%,则意味着还有30%的空间供以后使用。0等同于100,意味着页级别几乎已满,但留出了一些空间,至少能在添加一个索引行。
事例:
useHR
go
ifexists(selectnamefromsysindexeswherename='ix_expertise_skilllevel')
dropindexexpertise.ix_expertise_skilllevel
createnonclusteredindexix_expertise_skilllevelnoexpertise(skilllevel)withfillfactor=30
go
事例2:
select*fromexpertisewith(index=ix_expertise_skilllevel)whereacquiredDatebetween'2000-1-1'and'2010-1-1'、
若存在多个索引时,可以使用WITH(index=索引名)显示指定索引进行查询。
注意:所用索引可以加快数据检索速度,但没有必要为每个列都创建索引,因为索引自身也需要维护。
可以依据下面的标准选择创建索引:①该列用于频繁搜索;②该列用于对数据进行排序;③该列中重复值少。
以下列不适合建立索引:①列中重复值多;②表中数据少(为小型表建立索引是不必要的,因为索引的时间可能比检索表的时间还要长);③频繁进行插入操作的列(因为每次新添加了数据,索引都需要重新维护)