本文介绍: 如果现有数据存在重复键值,则一般情况下大多数数据库不允许创建唯一索引,当新数据 将使表中的键值重复时,数据库拒绝接收数据。此时使用全文索引效率将大大高于使用T-SQL 的LKE关键字的效率,因为全文索引创建过程与其他类型索引有很大的差别,所以建议学员借 助SOL Server联机帮助学习创建使用。在创建索引时,并不是只能对其中一列创建索引,与创建主键一样,可以多个列组合作为索 引,这种索引称为复合索引。非聚集索引建立在索引页上,在查询数据可以索引找到记录存放位置

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

结果

 

原文地址:https://blog.csdn.net/2301_77023501/article/details/134812084

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48604.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注