sqlserver 视图创建索引_数据库视图可以建立索引吗

sqlserver 视图创建索引_数据库视图可以建立索引吗文章目录操作前准备一、视图1、创建视图2、更新视图3、删除视图二、索引1、聚集索引2、非聚集索引3、创建索引语法格式:4、删除索引代码全部示例操作前准备一、视图1、创建视图视图(View)是从一个或多个表或其它视图导出的,用来导出视图的表称为基表,导出的视图又称为虚表。在数据库中,只存储视图的定义,不存放视图对应的数据,这些数据仍然存放在原来的基表中。使用视图前,必须先创建视图,创建…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

操作前准备

在这里插入图片描述
在这里插入图片描述

一、视图

1、创建视图

视图(View)是从一个或多个表或其它视图导出的,用来导出视图的表称为基表,导出的视图又称为虚表。在数据库中,只存储视图的定义,不存放视图对应的数据,这些数据仍然存放在原来的基表中。
使用视图前,必须先创建视图,创建视图要遵守以下原则:
(1)只有在当前数据库中才能创建视图,视图命名必须遵循标识符规则。
(2)不能将规则、默认值或触发器与视图相关联。
(3)不能在视图上建立任何索引。

T-SQL创建视图的语句是CREATE VIEW语句。语法格式:

CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute>[ ,…n ] ]
AS select_statement
[ WITH CHECK OPTION ]

说明:
view_name:视图名称;scheme是数据库架构名
column:列名,此为视图中包含的列,最多可引用1024个列。
WITH 子句:指出视图的属性
select_statement:定义视图的SELECT语句,可在该语句中使用多个表或视图。
WITH CHECK OPTION:指出在视图上进行的修改都要符合select_statement所指定的准则。

2、更新视图

更新视图指通过视图插入、删除、修改数据,由于视图是不存储数据的虚表,对视图的更改最终转化为对基表的更新。

通过更新视图数据可更新基表数据,但只有满足可更新条件的视图才能更新,可更新视图必须满足的条件是创建视图的select语句没有聚合函数,且没有top、group by、union子句及distict关键字,不包含基表列通过计算所得的列,且from子句至少包含一个基本表。

3、删除视图

在T-SQL中使用drop view语句删除视图。

use 数据库名称
go

drop view 视图名称

二、索引

数据库中的索引与书中的目录一样,可以快速找到表中的特定行。索引是与表关联的存储在磁盘上的单独结构,它包含由表中的一列或多列生成的键,以及映射到指定表行的存储位置的指针,这些键存储在一个结构(B树)中,使 SQL Server 可以快速有效地查找与键值关联的行。
建立索引的作用如下:
提高查询速度。
保证数据记录的唯一性。
查询优化依靠索引起作用。
提高ORDER BY、GROUP BY执行速度。

1、聚集索引

在聚集索引中,索引的顺序决定数据表中记录行的顺序,由于数据表中记录行经过排序,所以每个表只能有一个聚集索引。
表列定义了 PRIMARY KEY 约束和 UNIQUE 约束时,会自动创建索引。例如,如果创建了表并将一个特定列标识为主键,则 数据库引擎自动对该列创建 PRIMARY KEY 约束和索引。

2、非聚集索引

在非聚集索引中,索引的结构完全独立于数据行的结构,数据表中记录行的顺序和索引的顺序不相同,索引表仅仅包含指向数据表的指针,这些指针本身是有序,用于在表中快速定位数据行。一个表可以有多个非聚集索引。

3、创建索引语法格式:

CREATE [ UNIQUE ]		/ *指定索引是否唯一*/ [ CLUSTERED | NONCLUSTERED ]	/*索引的组织方式*/ INDEX index_name	/*索引名称*/
ON {
  
  [ database_name. [ schema_name ] . |
schema_name. ] table_or_view_name}( column [ ASC | DESC ] [ ,...n ] )	/*索引定义的依据*/ [ INCLUDE ( column_name [ ,...n ] ) ]
[ WITH ( <relational_index_option> [ ,...n ] ) ]	/*索引选项*/
[ ON {	partition_scheme_name ( column_name )	/*指定分区方案*/
| filegroup_name	/*指定索引文件所在的文件组*/
| default}]
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
/*指定FILESTREAM数据的位置*/[ ; ]

说明:
UNIQUE:表示表或视图创建唯一性索引。
CLUSTERED | NONCLUSTERED:指定聚集索引还是非聚集索引。 index_name:指定索引名称。 column:指定索引列。
ASC | DESC:指定升序还是降序。
INCLUDE子句:指定要添加到非聚集索引的叶级别的非键列。WITH子句:指定定义的索引选项。
ON partition_scheme_name:指定分区方案
ON filegroup_name:为指定文件组创建指定索引ON default:为默认文件组创建指定索引

4、删除索引

语 法 格 式 :

 DROP INDEX
{ index_name ON	table_or_view_name [ ,...n ]
| table_or_view_name.index_name [ ,...n ]
}

代码全部示例

-- 打开数据库
use sixstardb
go

-- 查询输出:数据表
select *from student
select *from course
select *from grade
go

------------------------------------------------------------------------------------------------
-- 创建视图
-- 先判断创建视图名称是否存在
if exists(select *from sysobjects where id=object_id(N'student_course_grade_view'))
drop view student_course_grade_view --删除视图
go

-- 创建视图
create view student_course_grade_view
as 
select student.sno,student.sname,student.ssex,course.cno,course.cname,grade.gno,grade.gmath,grade.genglish
from student,course,grade
where student.cno=course.cno and student.sno=grade.sno
go

-- 通过视图输出数据
select *from student_course_grade_view
go


-- 通过视图插入数据
use sixstardb
go
if exists(select *from sysobjects where id=object_id(N'course_view'))
drop view  course_view
go

create view course_view -- 创建课程表视图
as 
select course.cno,course.cname
from course

select *from course_view -- 通过视图输出数据
insert into course_view(cno,cname)
values('08','模型') --通过视图插入数据
go

update course_view set sno='1007'  -- 通过视图修改数据
where cno=116

select *from course --查询输出基础表

-- 删除视图
drop view  course_view
go

-- 通过视图删除记录
-- delete 


------------------------------------------------------------------------------------------------
-- 索引
use sixstardb 
go

select *from grade 

create index idx_gscore on grade(gmath)  -- 创建索引

select *from idx_gscore

drop index grade.idx_gscore	--删除索引




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170889.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux下ffmpeg安装教程(亲测有效)「建议收藏」

    Linux下ffmpeg安装教程(亲测有效)「建议收藏」Linux下ffmpeg安装教程(亲测有效)

    2022年9月13日
    0
  • MC蒙特卡洛_我的世界mcc是什么

    MC蒙特卡洛_我的世界mcc是什么MCMC(一)蒙特卡罗方法MCMC(二)马尔科夫链MCMC(三)MCMC采样和M-H采样MCMC(四)Gibbs采样作为一种随机采样方法,马尔科夫链蒙特卡罗(MarkovChainMont

    2022年8月1日
    25
  • matlab imfill函数「建议收藏」

    matlab imfill函数「建议收藏」Matlab函数imfill简介函数功能:该函数用于填充图像区域和“空洞”。语法格式:BW2=imfill(BW)这种格式将一张二值图像显示在屏幕上,允许用户使用鼠标在图像上点几个点,这几个点围成的区域即要填充的区域。要以这种交互方式操作,BW必须是一个二维的图像。用户可以通过按Backspace键或者Delete键来取消之前选择的区域;通过shift+鼠标左键单击或者

    2022年9月13日
    0
  • shell脚本之for循环语句_shell脚本if判断

    shell脚本之for循环语句_shell脚本if判断循环有:for、while、until什么是for循环呢?for循环逻辑:就是将循环列表中的元素赋值给变量,每次赋值便执行一次循环,done就标志着一个循环的结束。直到列表中的元素消耗殆尽,结束整个循环(也可以这么理解,因为某件事,你把你对象惹生气了,你是不是得道歉,道歉一次没用,是不是要第二遍,这是一个循环直到你对象原谅你这个循环才结束.也可以这么理解)for变量in值1值2值3do相当于大括号的上上半部分echo语句程序done相当于大括号的下半部分

    2025年5月31日
    1
  • 公众号发送模板消息

    公众号发送模板消息场景:当用户在公众号中发起了一笔支付,后台给用户发送一个消息。微信配置:用的个人公众号测试,访问地址https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login&token=1212530455&lang=zh_CN(1)配置域名:(2)配置模板消息(3)修改网…

    2022年5月1日
    45
  • oracle创建表空间的SQL语句

    oracle创建表空间的SQL语句oracle创建表空间语句:createtablespaceshopping–创建一个叫shopping的表空间datafile’shopping.dbf’–物理文件名size50m–大小autoextend…

    2022年7月27日
    4

发表回复

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

关注全栈程序员社区公众号