索引的概念
数据库中的索引类似于一本书的目录,在这本书中使用目录可以快速找到我们想要的信息,而不需要读完整本书。在数据库中,数据库程序使用索引可以查询表中的数据,而不必扫描整个表。数据库中的索引是表中值以及各值存储位置的列表。
索引的利弊
利:
因为查询执行的大部分都是I/O操作,使用索引可以避免全表扫描而且索引是经过某种算法优化过的一个排序的数据结构
,因而查找次数要少的所,合理的使用索引可以加速数据的查询。
弊:
增加了数据库的存储空间;在插入和修改数据时要花费较多的时间。
上图展示了一种可能的索引方式。左边是数据表,一共有两列7条记录,最左边的是数据记录的物理地址。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找树获取相应数据。
索引的分类
按存储结构区分:“聚集索引(又称聚类索引,簇集索引)”,“分聚集索引(非聚类索引,非簇集索引)”
按数据唯一性区分:“唯一索引”,“非唯一索引”
按键列个数区分:“单列索引”,“多列索引”。
按数据唯一性区分:“唯一索引”,“非唯一索引”
按键列个数区分:“单列索引”,“多列索引”。
聚集索引
物理存储顺序和索引顺序完全相同,所以只有一种排序方式,一个表只能建立一个聚集索引。
非聚集索引
指定数据的逻辑顺序,表中数据并没有按照索引键值指定的顺序排列,仍然按照插入记录时的顺序存放。
SQL Server在默认的情况下建立的索引是非聚集索引,由于非聚集索引不对表中的数据进行重组,而只是存储索引键
唯一索引
指索引的键值不重复,为表上的某字段创建唯一索引时,应确定该字段没有NULL值,否则在使用时会经常出错。唯一索引可以确保索引列不包含重复的值,在多列唯一索引中,索引可以确保索引列中每个值组合都是唯一的。
单列索引
单列索引是指索引基于单个列所创建
多列索引
索引项是多个索引,在索引建立语句总同时包含多个列名。
索引的操作
创建索引
CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED ]
INDEX index_name
ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )
CREATE INDEX命令创建索引各参数说明如下:
UNIQUE:用于指定为表或视图创建唯一索引,即不允许存在索引值相同的两行。
CLUSTERED:用于指定创建的索引为聚集索引。
NONCLUSTERED:用于指定创建的索引为非聚集索引。
index_name:用于指定所创建的索引的名称。
table:用于指定创建索引的表的名称。
view:用于指定创建索引的视图的名称。
ASC|DESC:用于指定具体某个索引列的升序或降序排序方向。
例子
CREATE UNIQUE
INDEX unStudentID
ON T_dwxer_tiankongti_Record_01(StudentID ASC)
查看结果:
查看索引
use [2015-06-29考前英语备份]
exec sp_helpindex T_dwxer_tiankongti_Record_01
查看结果:
删除索引
DROP INDEX T_dwxer_tiankongti_Record_01.t_dwerindex;
索引的设计原则
对于一张表来说索引的有无和建立什么样的索引,要取决与where字句和Join表达式中。