SQL Server——SQL Server视图及索引技术

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: SQL Server——SQL Server视图及索引技术

操作前准备



一、视图


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 --删除索引
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
23天前
|
SQL 存储 算法
比 SQL 快出数量级的大数据计算技术
SQL 是大数据计算中最常用的工具,但在实际应用中,SQL 经常跑得很慢,浪费大量硬件资源。例如,某银行的反洗钱计算在 11 节点的 Vertica 集群上跑了 1.5 小时,而用 SPL 重写后,单机只需 26 秒。类似地,电商漏斗运算和时空碰撞任务在使用 SPL 后,性能也大幅提升。这是因为 SQL 无法写出低复杂度的算法,而 SPL 提供了更强大的数据类型和基础运算,能够实现高效计算。
|
2月前
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
|
2月前
|
SQL 关系型数据库 MySQL
如何确认SQL用了索引:详细技巧与方法
在数据库管理中,索引是提高SQL查询性能的重要手段
|
2月前
|
SQL 存储 关系型数据库
SQL默认索引是什么:深入解析与技巧
在SQL数据库中,索引是一种用于提高查询性能的重要数据结构
|
2月前
|
SQL 存储 关系型数据库
SQL默认索引是什么
在SQL数据库中,索引是一种用于提高查询性能的数据结构
|
2月前
|
SQL 关系型数据库 MySQL
如何确认SQL用了索引
在数据库管理和优化过程中,确认SQL查询是否使用了索引是一个至关重要的步骤
|
SQL 数据库 索引
Sqlserver与access数据库sql语法十大差异
ACCESS结构简单容易处理,而且也能满足多数的网站程序要求,也是初学者的试牛刀。ACCESS是小型数据库,既然是小型就有他根本的局限性: 1)、数据库过大,一般ACCESS数据库达到50M左右的时候性能会急剧下降! 2)、网站访问频繁,经常超过100人的在线时,处理速度会有影响! 3)、记录数过多,一般记录数达到10万条左右的时候性能就会急剧下降!微软公司为了与ACCESS高低搭配的一种高端方案:改用了Sqlserver,但语法会有一些差异。
1004 0
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
5月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
122 13
|
5月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。