视图和索引

目录

1、视图

[1.1 视图的定义](#1.1 视图的定义)

[1.2 视图的分类](#1.2 视图的分类)

[1. 标准视图](#1. 标准视图)

[2. 索引视图](#2. 索引视图)

[3. 分区视图](#3. 分区视图)

[4. 系统视图](#4. 系统视图)

[1.3 视图的优点](#1.3 视图的优点)

[1.4 T-SQL创建视图](#1.4 T-SQL创建视图)

[1. 原则](#1. 原则)

[2. T-SQL创建视图](#2. T-SQL创建视图)

[1.5 T-SQL修改视图](#1.5 T-SQL修改视图)

[1.6 视图的使用](#1.6 视图的使用)

[1. 查询](#1. 查询)

[2. 通过视图修改基本表](#2. 通过视图修改基本表)

[1.7 T-SQL删除视图](#1.7 T-SQL删除视图)

2、索引

[2.1 索引的定义](#2.1 索引的定义)

[2.2 索引的分类](#2.2 索引的分类)

1.聚集索引

[2. 非聚集索引](#2. 非聚集索引)

[2.3 索引的优点](#2.3 索引的优点)

[2.4 T-SQL创建索引](#2.4 T-SQL创建索引)

[1. 索引创建的位置的建议](#1. 索引创建的位置的建议)

[2. T-SQL创建索引](#2. T-SQL创建索引)

[3. T-SQL创建索引视图](#3. T-SQL创建索引视图)

[2.5 T_SQL查看索引](#2.5 T_SQL查看索引)

[2.6 T-SQL删除索引](#2.6 T-SQL删除索引)


1、视图

1.1 视图的定义

视图所对应的数据不是以视图结构存储在数据库中 ,而是存储在视图所引用的表中。

可以通过视图修改基本表。

1.2 视图的分类

1. 标准视图

用户自定义的视图。

2. 索引视图

当对视图创建索引时,SQL Server会将视图的结果集存储为一个物理表,这个表被称为索引视图

3. 分区视图

在一台或多台服务器间水平连接一组成员中的分区数据。看起来像来自同一个表。

分为本地分区视图和分布式分区视图:在本地分区视图中,所有相关的表和视图,都连接在同一个SQL Server实例上;在分布式分区视图中,至少有一个相关表是连接在不同的(远程)服务器上的。

4. 系统视图

公开目录元数据。

1.3 视图的优点

  1. 方便:视图已经对表进行预查询。在预查询的基础上查询,更方便。

  2. 数据逻辑独立性:应用程序与数据库的逻辑结构是相互独立的。当构成视图的基本表结构发生改变时,只需要修改视图中的查询语句,使视图显示的数据结构保持不变,从而基于视图的应用程序无须改变。

  3. 安全性:通过对不同的用户定义不同的视图,使用户只能查询和修改与自己相关的数据。

1.4 T-SQL创建视图

1. 原则
  1. 只能在当前数据库中创建视图

  2. 视图的名称需遵循标识符的规则 ,且在其所在的命名空间(通常是数据库本身)内必须是唯一的。不能与表名称相同。

  3. 不能创建临时视图;不能使用临时表或表变量创建视图;可以基于视图创建视图。

  4. 视图定义 中的SELECT子句不可以包含ORDER BY ,除非有一个TOP字句。

  5. 视图定义中的SELECT子句不能包含INTO关键字(因为视图本身并不存储数据)、OPTION子句。

  6. 如果某个视图依赖于已删除的表或视图,当有人使用视图时,报错。

2. T-SQL创建视图
sql 复制代码
CREATE VIEW [schema_name.]view_name[(column_name[,...n])]
AS
select_statement
[WITH CHECK OPTION]

column_name:给视图中的列取名。

AS:指定视图要执行的操作。不要忘了。

WITH CHECK OPTION:保证通过视图修改基本表 时,必须满足创建视图的select语句中的where中的条件。如:创建一个男生的视图,此时不能插入女生的记录。

创建一个view_sg视图,显示sno,sname,gender,sage

sql 复制代码
use teaching
go
create view view_sg
as
select sno,sname,gender,sage
from student

1.5 T-SQL修改视图

与创建视图一样,只是把CREATE换成了ALTER,

注意:修改时,继续包含WITH CHECK OPTION,才有作用,删了,就没有这个作用了。

1.6 视图的使用

1. 查询

和表的查询一样,只是from table,变成了 from view。

2. 通过视图修改基本表
  1. 对数据的任何更新(update、insert、delete),都只能引用一个基本表的列。

  2. 如果视图仅包含某些列 ,当进行insert时,若另外的列不允许为空且没有默认值时 ,报错。

  3. 若创建(或修改)视图时,加了WITH CHECK OPTION,通过视图修改基本表 时,必须满足创建视图的select语句中的where中的条件

  4. 当视图依赖于多个表 时,不能insert,delete,一次只能update一个表,

  5. 视图中修改的列 必须是直接引用表中 的列的基础数据。如:视图中是平均分,那么没办法通过视图修改表。

  6. 被修改的列不应受在创建视图时的GROUP BY,HAVING,DISTINCT,TOP的影响。如:视图中是前几名的分数,那么修改到了分数,那么前几名就可能变了。

1.7 T-SQL删除视图

sql 复制代码
DROP VIEW view_name

2、索引

2.1 索引的定义

索引包含由表或视图中的一列或多列生成的键,这些键存储在一个B树中,使用索引可以快速、高效地查找与键值关联的行。

2.2 索引的分类

索引有唯一索引 (索引列不能有相同的记录 ),非唯一索引 ,单列索引 (索引列只有一列 ),复合索引。

1.聚集索引

聚集索引 会对表和视图 进行物理排序 ,只能有一个。表中没有聚集索引 时,主键列 会作为 一个聚集索引。

2. 非聚集索引

非聚集索引不会对表和视图进行物理排序,如果表中不存在聚集索引,则表是未排序的。

2.3 索引的优点

  1. 加快 数据的检索速度。

  2. 创建唯一索引,可以使表中的每一行不同。(唯一性约束)

  3. 加速表的连接。

  4. 可以减少分组和排序 的时间。

  5. 查询优化器会利用索引来提高查询性能。

但是,也有一些缺点:

  1. 维护 索引,会消耗时间。

  2. 太多 的索引,会消耗物理空间。

2.4 T-SQL创建索引

1. 索引创建的位置的建议
  1. 经常需要搜索的列。

  2. 主键 和外键。

  3. 经常要排序的列。

  4. 经常在WHERE中使用的列。

  5. 连接 的列和使用聚合函数的列。

不建议使用索引的地方:

  1. 记录少的列

  2. 列的修改成本大于检索成本的列

2. T-SQL创建索引
sql 复制代码
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name
ON [table_name|view_name] (column_name[ASC|DESC] [,...n])

UNIQUE:唯一性,默认不唯一。

CLUSTERED**|** NONCLUSTERED:聚集索引|非聚集索引,默认NONCLUSTERED (非聚集索引)。

ASC**|** DESC:升序|降序,默认ASC (升序)。

为student表建立一个按sage升序的非聚集索引。

sql 复制代码
use teaching
go
create index asc_sage
on student(sage)
3. T-SQL创建索引视图

在 SQL Server 中,只有带有****WITH SCHEMABINDING 的视图才能创建聚集索引。这是因为聚集索引要求数据物理存储在特定的顺序中,而 WITH SCHEMABINDING 确保了视图定义与基础表架构的稳定性,从而允许 SQL Server 实现这一物理存储要求。

不带 WITH SCHEMABINDING 的视图通常只能有非聚集索引。

创建一个索引female_view视图,并创建一个按sno升序的唯一聚集索引。

sql 复制代码
use teaching
go
create view female_view
with schemabinding
as
select sno,sname,gender,specialty 
from dbo.student -- 要指定架构名(schema_name),默认是dbo
where gender = '女'
go
create unique clustered index asc_q_sno
on female_view(sno)

2.5 T_SQL查看索引

sql 复制代码
use teaching
go
exec sp_helpindex student -- 查看student表中的索引
-- 或
exec sp_help student  -- student表中更详细的信息

2.6 T-SQL删除索引

sql 复制代码
DROP INDEX table_name.index_name

注意:要指定是哪个表的索引。

相关推荐
Lzc7742 年前
存储过程和触发器
sql server 2014·数据库原理及应用
Lzc7742 年前
T-SQL编程
sql server 2014·数据库原理及应用
Lzc7742 年前
数据库的概念和操作
数据库原理与应用·sql server 2014