5.1索引
索引提供指针以指向存储在表中指定列的数据值,然后根据指定的次序排列这些指针,再跟随 指针到达包含该值的行。
5.1.1什么是索引
数据库中的索引与书籍中的目录类似。在一本书中,无须阅读整本书,利用目录就可以快速查 找所需信息。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。 书中的目录是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或 若干列值的集合,以及物理标识这些值的数据页的逻辑指针清单。
索引是SQL Server 编排数据的内部方法,它为SOL Server 提供一种方法来编排查询数据的路由。
索引页是数据库中存储索引的数据页。索引页存放检索数据行的关键字页及该数据行的地址指 针。索引页类似于汉语字(词)典中按拼音或笔画排序的目录页。通过使用索引,可以大大提高数 据库的检索速度,改善数据库性能。
5.1.2 索引分类
在SQL Server 中,常用的索引有以下六类。
1.唯一索引
唯一索引不允许两行具有相同的索引值。
如果现有数据中存在重复的键值,则一般情况下大多数数据库不允许创建唯一索引,当新数据 将使表中的键值重复时,数据库也拒绝接收此数据。例如,如果在某个表中的“身份证号”列上创 建了唯一索引,则所有记录的身份证号不能重复。
注:创建了唯一约束,将自动创建唯一索引。尽管唯一索引有助于找到 信息,但是为了获得最佳性能,建议使用主键约束。
2.主键索引
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。 主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。
3.聚集索引
在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。
4.非聚集索引
非聚集索引建立在索引页上,在查询数据时可以从索引中找到记录存放的位置。
非聚集索引使表中各行数据存放的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引 有更快的数据访问速度。例如,按笔画排序的索引就是非聚集索引.“1”画的字(词)对应的页码 可能比“3”画的字(词)对应的页码大(靠后).
注:在SQLServer中,一个表只能创建一个聚集索引,但可以有多个非 聚集索引。设置某列为主键,该列就默认为聚集索引。
5.复合索引
在创建索引时,并不是只能对其中一列创建索引,与创建主键一样,可以将多个列组合作为索 引,这种索引称为复合索引。
需要注意的是,只有用到复合索引的第一列或整个复合索引列作为条件完成数据查询时才会用到该索引。
6.全文索引
全文索引是一种特殊类型的基于标记的功能性索引,由SQL Server 中全文引擎服务创建和维护。 全文索引主要用于在大量文本中搜索字符串,此时使用全文索引的效率将大大高于使用T-SQL 的LKE关键字的效率,因为全文索引的创建过程与其他类型的索引有很大的差别,所以建议学员借 助SOL Server联机帮助学习其创建和使用。
实验环境(实验案例一)
在SQL Server 2016的服务器上,clss数据库保存了学员及考试信息,包含的表及结构如图所示。
xueyuan 表
chengji 表
kecheng 表
需求描述
> 利用索引查询考试成绩为80~90分的所有记录。
> 要求输出:学员姓名、课程名、考试日期和学员成绩。
利用索引查询考试成绩为80~90分的所有记录。
先创建非聚集索引,在数据库clss下 > 表dbo.chengji > 索引 > 新建索引 > 非聚集索引
右键clss数据库,新建查询,输入以下内容
select * from chengji
with (index=non)
where 学员成绩 between 80 and 90
查询结果
要求输出:学员姓名,课程名、考试日期和学员成绩。
在数据库视图中新建视图,把这3个表都添加进来,选中题目所要求的,右键执行显示出来的命令即可
SELECT dbo.xueyuan.学员姓名, dbo.kecheng.课程名, dbo.chengji.考试日期, dbo.chengji.学员成绩
FROM dbo.chengji INNER JOIN
dbo.kecheng ON dbo.chengji.课程ID = dbo.kecheng.课程ID INNER JOIN
dbo.xueyuan ON dbo.chengji.学员ID = dbo.xueyuan.学员ID
结果