SQL Server数据库 -- 索引与视图

这篇具有很好参考价值的文章主要介绍了SQL Server数据库 -- 索引与视图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

文章目录

  • 一、索引
    • 聚集索引
    • 非聚集索引
  • 二、视图
  • 三、自定义函数
    • 标量函数
    • 表值函数
  • 四、游标
  • 五、总结

前言

在学习完创建库表、查询等知识点后,为了更加方便优化数据库的存储和内容,我们需要学习一系列的方法例如索引与视图等等,从而使我们更加熟练和使用数据库,突破表面,触摸内部!


一、索引

1、索引简介

      索引是加快数据查询效率的一种有效方法,因为建立索引可以改变数据的搜索结构。多数情况下索引是建立在基础表上的,但也可以建立在视图上。

      在数据库中建立索引是为了提高数据的查询速度,与书本前面的目录或书后面的术语表类似。利用目录或属于快速查找所需信息,而无需翻阅整本书。

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

但是使用索引也是有代价的:

      首先,索引在数据库中占有一定的存储空间。其次,在对数据进行插入、修改、删除操作时,为了使索引与数据保持一致,还需要对索引进行相应的维护,而维护是需要时间成本的。

2、聚集索引      

      聚集索引对数据按索引关键词进行物理排序,像一颗B树(平衡树)一样,最上层结点和中间层结点放置索引页码编号范围,最下层才放置数据。从上往下查找,直至找到相同的页码编号。

例如下图所示:

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

例如:查找E08的所有信息 

解析:首先看顶层,如果比E07小则选择左边,和E07相等或者大于E07则选择右边。E08比EE07大则看向右边!以此类推,E08比E10小则选择左边,最终看向E08所对应的所有信息!

      聚集索引的关键词:clustered index,用于给什么表的什么字段创建添加索引

现有学生表如下:

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

当创建表时有主键时会自动创建一个聚集索引,因此一般不需要我们再去创建聚集索引,

并且要求聚集索引只能由一个。

1.创建聚集索引

给student表中的id字段添加聚集索引

create clustered index index_id
on student(id)

2.查看聚集索引

select *from sys.indexes where name = 'index_id'

3.删除聚集索引

drop index index_id on student

 3、非聚集索引

      非聚集索引与书本后面的术语表差不多,但非聚集索引不对数据进行物理排序,并且非聚集索引的最后一层结点并不放数据。非聚集索引是可以定义多个的,SQL Server2017最多允许在一个表上建立999个非聚集索引。

      非聚集索引关键字:nonclustered index

1.创建非聚集索引

给student表中的id字段添加一个非聚集聚集索引index_id

create nonclustered index index_id
on student(id)

2.查看非聚集索引

select *from sys.indexes where name = 'index_id'

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

 SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

 3.删除非聚集索引

drop index index_id on student

4、聚集索引与非聚集索引的区别 

1、聚集索引按索引关键字进行物理排序,非聚集索引不对数据 进行物理排序。

2、聚集索引最后一层结点存放数据,非聚集索引最后一层结点不放置数据。


二、视图

1、视图简介

      视图是从数据库的基本表中选取出来的数据组成的逻辑窗口,是基本表部分行、部分列数据的组合。与基本表不同的是,视图是一个虚表,数据库中只存储视图的定义,而不存储视图的数据,这些数据仍存放在原来的基本表中。

      使用视图的好处:

1、视图数据会始终与基本表数据保持一致。

2、节省存储空间。当数据量非常大时,重复存储数据是非常耗费空间的。

2、视图语句

现有学生表如下:

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

 对上面的学生表进行操作!

1.创建视图

建立年龄在十八岁以上学生的学号、姓名、年龄的视图

create view is_student
as
select id,name,age from student
where age>18

 2.查看视图

select *from is_student

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构 SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

 3.删除视图

drop view is_student

三、自定义函数

      用户自定义函数可以扩展数据操作的功能,在概念上类似于一般的程序设计语言函数中定义的函数。SQL Server支持两类用户定义函数:标量函数和表值函数。标量函数只返回单个数据值,而表值函数是返回一个表。函数关键词:function

1、标量函数

      当调用标量函数时,必须提供最少由两部分组成的名称:函数所属架构名和函数名。只要类型一致,可在任何允许出现表达的SQL语句中调用标量函数。

现有学生表student如下:

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

1.创建标量函数

创建查询指定学生(学号)的所在系名称的标量函数  ->  输入学号得到学生所在系

create function myself(@sno char(9))
returns char(2)
as
begin
return (select dept from student where sno = @sno)
end

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

2.调用标量函数

查询学生学号为:202115005所在系名称

select dbo.myself(202115005)

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

 3.删除标量函数

删除标量函数myself

drop function dbo.myself

2、表值函数

      表值函数的使用方法与视图非常类似,需要将其放置在查询语句的from子句部分,其作用类似于带参数的视图。

现有学生表student如下:

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

1.创建表值函数

创建查询指定系的学生学号、姓名、性别和年龄  ->  输入系得到所有系内的学生信息

create function getnew(@dept char(2))
returns table
as
return(
	select *from student 
	where dept = @dept
)

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

 2.调用表值函数

查询CS系的所有学生信息

select *from dbo.getnew('CS')

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

3.删除表值函数

drop function dbo.getnew

四、游标

      由select语句返回的行集中包括所有满足条件子句的行,这一完整的行集被称为结果集。但有时候用户需要对结果集中的每一行或部分行进行单独的处理,而这在select结果集中无法实现。游标就是提供上述机制的结果集扩展,我们可以使用游标逐行处理结果集。游标的关键词为:cursor

1、游标的组成及特点

游标由两部分组成:游标结果集 和 游标当前行指针

游标具有如下特点:

1、允许定位结果集中的特定行

2、允许从结果集的当前位置检索一行或多行

3、支持对结果集中当前行数据的修改

4、为其他用户对显示在结果集中的数据的更改提供不同级别的可见性支持

 现有学生表student如下:

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构

2、游标的用法

定义查询姓 ”王“的学生的姓名和所在系的游标,并输出游标结果 

1.创建游标

declare @sname char(10),@dept varchar(20)-- 声明存放结果集数据的变量
declare s1 cursor for  --创建游标
select sname,dept from student
where sname like '王%'

2.打开游标

open s1

3.提取行数据

fetch next from s1 into @sname,@dept --首先提取第一行数据
while @@FETCH_STATUS = 0  --通过检查判断是否还有可读取的值
begin
print 
@sname + @dept
fetch next from s1 into @sname,@dept --提取下一行数据
end

4.关闭和删除游标

close s1  --关闭游标
deallocate s1 --删除游标

整体代码如下:

declare @sname char(10),@dept varchar(20)-- 声明存放结果集数据的变量
declare s1 cursor for  --创建游标
select sname,dept from student
where sname like '王%'
open s1
fetch next from s1 into @sname,@dept --首先提取第一行数据
while @@FETCH_STATUS = 0  --通过检查判断是否还有可读取的值
begin
print 
@sname + @dept
fetch next from s1 into @sname,@dept --提取下一行数据
end
close s1  --关闭游标
deallocate s1 --删除游标

运行结果如下: 

SQL Server数据库 -- 索引与视图,SQL Server数据库,数据库,sql,sqlserver,java,数据结构


五、总结

      本次主要介绍了索引与视图、函数和游标。各自的关键词分别为:index、view、function、cursor。它们都是为了方便和简化数据库的操作,索引是为了加快查询效率,视图是为了节省空间、函数能够根据输入显示输出结果、游标能够获取特定行数据。

      它们都是可以创建使用和删除的,灵活运用这些额外功能能够很大程度提高效率和空间,也是数据库进阶的必经之路,本次也只是简单列举了如何使用它们,更多复杂的功能还得继续往下学。

      如果这篇文章能够帮助到你,还请点个小赞支持一下!!!文章来源地址https://www.toymoban.com/news/detail-623015.html

到了这里,关于SQL Server数据库 -- 索引与视图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 连接数据库报com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    JDBC加载驱动,连接SQLServer 2012 报 java.ext.dirs: C:Program FilesJavajdk1.8.0_331jrelibext;C:WindowsSunJavalibext com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client pre

    2023年04月21日
    浏览(101)
  • 数据库实验:SQL的数据视图

    视图是由数据库中的一个表或多个表导出的虚拟表,其作用是方便用户对数据的操作 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的

    2024年02月05日
    浏览(62)
  • 数据库sql语句(视图的创建)

    例题:  建表:要注意各表之间的索引联系,建表先后顺序很重要,不然建不了,例如先建dept,在建其他表,先在dept插入数据,再在其他表插入数据 (1) (2)  (3)  (4) (5)    插入数据如下图 sql语句: 在 Student 表中加入属性 SAGE(INT 型 )  将 Student 表中的属性 SA

    2024年02月04日
    浏览(70)
  • 浅谈SQL Server索引视图(物化视图)以及索引视图与查询重写

    目录 (一)前言 (二)正文 1. 物化视图(索引视图)与查询重写的基本概念 2. 创建测试环境 (1)建表 (2)写数据 3. 索引视图创建 (1)创建语法 (2)为索引视图创建索引  4. 查询重写 5. 为什么查询会被重写  6. 索引视图什么时候更新 7. 改变基于视图的查询 之前做

    2024年02月05日
    浏览(70)
  • SQL Server 索引和视图

    难度指数:* * * 目录 1.索引 什么是索引? 索引的作用? 索引的分类 1. 唯一索引 2. 主键索引 3. 聚集索引 4.非聚集索引 5.复合索引 6.全文搜索 索引的创建(命令+图形) 2. 视图 创建视图 查询视图 更新视图 删除视图 实例 什么是索引? 索引(Index)是数据库中一种用于加速对

    2024年02月04日
    浏览(37)
  • (SQL)用bat启动sqlserver服务+创建数据库(学习笔记)

    注:我使用的软件是 Microsoft SQL Server Management Studio 18 我想创建一个bat的文本,于是就把记事本的后缀名txt直接改成了bat,但是当我想打开bat文件的时候却报错了。 改成 我双击 test.bat 文件,结果显示如下错误: 原来正确做法是 先创建后缀名是 txt 的文本,把代码写好,然后

    2024年02月05日
    浏览(65)
  • SQL Server 数据库之SQL Server 数据库的安全设置

    数据库服务器是所有应用的数据中转站,若数据库服务被恶意攻击,可能会造成数据泄露、数据丢失、数据被恶意篡改等诸多无法挽回的损失; 所以,对数据库进行安全设置是每一个数据库管理人员都应掌握的知识; SQL Server 登录模式分为 “Windows 身份验证模式” 和 “SQL

    2024年02月06日
    浏览(80)
  • GaussDB云数据库SQL应用系列-视图管理

    一、前言 GaussDB是一款基于云计算技术的高性能关系型数据库,支持多种数据模型和分布式架构。在GaussDB中,视图管理是非常重要的一项功能,它可以帮助用户更方便地管理和查询数据。 数据库视图管理是指对数据库中的视图进行创建、修改、删除、查询等操作的过程。 参

    2024年02月06日
    浏览(118)
  • SQL Server数据库使用SQL Server代理实现数据库自动备份

    在现实中,为了保证数据的安全和完整,防止人为错误和硬件故障等造成的数据丢失和损坏,就需要用到数据库的备份,不同的数据库方法有所差别,我这边主讲SQL Server数据库的备份和使用SQL Server代理作业实现数据库的定时备份。 目录 一、开启SQL Server代理 1、找到SQL Serv

    2024年02月09日
    浏览(83)
  • 数据库原理及应用实验报告-实验4-SQL的视图

    实验目的 熟悉SQL支持的有关视图的操作,能够熟练使用SQL语句来创建需要的视图,对视图进行查询和删除视图。 实验内容 定义常见的视图形式,包括: 行列子集视图 WITH CHECK OPTION的视图 基于多个基表的视图 基于视图的视图 带表达式的视图 分组视图 通过实验考察WITH CHEC

    2023年04月26日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包