内容正文:
网站数据库应用技术SQL Server 2008
(项目教程)
项目八: 索引及其应用
索引的概念
创建索引
索引的删除
任务一
任务二
任务三
索引及其应用
任务四
索引的优化
8.1 任务1: 索引的概念
索引及其应用
索引是与表关联的页的集合,用于提高查询的性能或增强唯一性。如果把数据库表看做一本书,则表的索引就如同书的目录一样,通过索引可以大大提高查询的速度。常用的关系数据库如SQL Server、Sybase、Oracle、DB2等,为了提高性能,都提供了相应的索引机制。
8.1.1相关知识
索引的概念
使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。
在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。如图 8‑1所示:
(1)索引的概念
相关知识
索引的概念
(1)索引的概念
图8-1 SQL-Server访问数据方式
相关知识
索引的概念
在SQL Server2008中,从物理结构上主要有两种常用索引,包括聚集索引、非聚集索引。
其中:
聚集索引:
聚集索引将数据行的键值在表内排序并存储对应的数据记录,使得数据表物理顺序与索引顺序一致,当以某字段作为关键字建立聚集索引时,表中数据以该字段作为排序根据。因此一张表只能建立一个聚集索引。如果表中没有创建其他的聚集索引,则会在表的主键上自动创建聚集索引。
(2)索引的分类
图8-2 聚集索引
相关知识
索引的概念
非聚集索引:
非聚集索引并不物理上改变表中数据行的排列,即索引中的逻辑顺序并不等同于表中数据行的物理顺序,索引仅记录指向表中数据行位置的指针。因此,在非聚集索引中,数据和索引是分开存储的,索引的叶级由索引页,而不是数据页组成。
一个表最多可以有249个非聚集索引,无论表是否使用聚集索引,都可以对表定义非聚集索引。
(2)索引的分类
图8-3 非聚集索引
相关知识
索引的概念
唯一性索引:
一个唯一索引,不允许具有索引值相同的行,从而禁止重复的索引或键值。系统在创建该索引时检查是否有重复的键值,并在每次使用 INSERT 或 UPDATE 语句添加数据时进行检查,聚集索引和非聚集索引都可以是唯一性索引。
非唯一性索引:
表中索引列的值不唯一。
(2)索引的分类
相关知识
索引的概念
索引的优点
通过创建唯一索引,可以增强数据记录的唯一性
可以大大加快数据检索的速度。
可以加速表与表之间的连接。特别是在实现数据的参照完整性方面。
使用索引可以再检索数据的过程中使用优化隐藏器,提高系统性能。
在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。
创建索引的注意事项
带索引的表在数据库中会占据更多的空间,对数据进行插入、更新、删除操作的命令所花费的时间会更长。
创建索引所需的工作空间约为数据库表的1.2倍。
在设计和创建索引时,应确保对性能的提高程度大于在存储空间和处理资源方面的代价。
(3)索引的优点与注意事项
8.2 任务2:创建索引
8.2.1 相关知识
创建索引
索引的创建方式有两种,使用图形工具和使用T-SQL 语句。
1.什么情况需要创建索引:
因为创建索引需要耗费一定的系统性能,所以当出现以下情况时间可以考虑创建索引。
定义有主关键字和外部关键字的列
需在指定范围中快速或频繁查询的列
需要按排序顺序快速或频繁检索的列
在集合过程中需要快速或频繁组合到一起的列
2.什么情况不需要创建索引:
在下列情况时,可以考虑不创建索引。
在查询中几乎不涉及的列
很少有唯一值的列
由text,ntext或image数据类型定义的列
只有较少行数的表
(1)创建索引的方法
相关知识
创建索引
使用Transact-SQL的CREAT INDEX语句创建索引的语法结构和参数说明如下:
基本语法:
CREATE [UNIQUE] [CLUSTERED] [NONCLUSTERED] INDEX index_name
ON table_or_view_name (colum [ASC | DESC] [,…n])
[INCLUDE (colum_name[,…n])]
[WITH
(PAD_INDEX = {O