索引在早期的数据库管理系统中作用十分明显,是数据库技术中一个重要的部分。本章将介绍索引的基本概念及其使用。
本章主要内容
& 索引的概念
& 索引的创建
& 索引的使用
利用索引可以快速访问数据库表中的特定信息,索引是对表中一个或多个列的值进行排序的结构。它提供了指针以指向存储在表中指定列的数据值,然后根据指定的排序方法来排列这些指针。数据库使用索引的方法与使用书的目录相似,通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。
使用索引后,数据库存储时包含两种页面,即存放数据的数据页面和存储索引的索引页面。索引页面存放检索数据行的关键字值和该数据行的存储地址的指针,通过该指针即可直接检索到数据,这会加速物理数据的检索。例如,在student表的sno列上建立索引,索引页上的关键字若为“20 061 588 160 601”,则表示sno字段值为20 061 588的行存储在16盘区6页面,而且是表中第一个数据行。
SQL Server在创建索引时,让数据库扫描表,收集作为索引的列值,再写入该值所在数据行的地址信息,这样就可以使得数据库服务器在查询表寻找匹配数据前,通过扫描索引页来跳转到相应的数据行。索引对下列查询很有帮助。
· 搜索符合特定关键字值的行,即在查询时使用WHERE语句指定具有给定值的列条目。例如,WHERE sno='20063452'。
· 搜索在一个范围内的关键字值的行,即查询值介于两个值之间的列条目。例如,where score BETWEEN 60 and 85。
一般来说,对表的查询都是通过主键来进行的,因此,首先应该考虑在主键上建立索引。此外,连接中频繁使用的列也可以考虑建立索引。但是并不是所有情况下建立索引都会提高性能,特别是使用INSERT或UPDATE来插入或更新数据时,维护所建立的索引会花费很多时间和空间。出现下列情况时,一般不考虑建立索引。
· 在查询时很少或从不引用的列。
· 只有两个或几个值的列,比如“性别”列,只取“男”和“女”。
· 记录数目较少的表。
根据索引的顺序和数据库的物理存储顺序是否相同,可将索引分为聚集索引和非聚集索引。这两者都包括存放索引的索引页面和存放记录的数据页面。聚集索引保证数据库表中记录的顺序与索引顺序一致,而非聚集索引中数据库表中记录的顺序与索引顺序可以不同。一个表中只能有一个聚集索引,而表中每一列上都可以有自己的非聚集索引。