数据库:使用视图优化查询性能

Interview 专栏收录该内容
67 篇文章 0 订阅

视图是从一个或多个表中导出来的虚拟表。这是因为视图返回的结果集的一般格式与由列和行组成的表相似,并且在SQL语句中引用视图的方式也与引用表的方式相同。

视图概述

视图是从一个或者几个基本表或者视图中导出的虚拟表,是从现有基表中抽取若干子集组成用户的“专用表”,这种构造方式必须使用SQL中的SELECT语句来实现。在定义一个视图时,只是把其定义存放在数据库中,并不直接存储视图对应的数据,直到用户使用视图时,才查找对应的数据。

使用视图具有如下优点:

  • 简化对数据的操作。视图可以简化用户操作数据的方式。可将经常使用的连接、投影、联合查询和选择查询定义为视图,这样在每次执行相同的查询时,不必重写这些复制的语句,只要一条简单的查询视图语句即可。视图可向用户隐藏表与表之间复制的连接操作。

  • 自定义数据。视图能够让不同用户以不同方式看到不同或相同的数据集,即使不同水平的用户共用同一数据库时也是如此。

  • 数据集中显示。视图可以使用户着重于其感兴趣的某些特定数据或所负责的特定任务,提高数据操作效率,同时增强数据的安全性,因为用户只能看到视图中定义的数据,而不是基本表中的数据。

  • 导入和导出数据。可以使用视图将数据导入或导出。

  • 合并分割数据。在某些情况下,由于表中数据量太大,在表的设计过程中可能需要经常对表进行水平分割或垂直分割,这样表结构的变化会对应用程序产生不良的影响。使用视图可以重新保持原有的结构关系,使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。

  • 安全机制。视图可以作为一种安全机制。通过视图,用户只能查看和修改他们能看到的数据。其他数据库或表既不可见,也不可访问。

创建视图

# 创建视图
CREATE VIEW view_name [(Column [,...])] AS select_statement [WITH CHECK OPTION];

其中参数的含义如下:

  • view_name:定义视图名,其命名规则与标识符的相同,并且要保证在一个数据库中是唯一的,该参数不能省略。

  • Column:声明视图中使用的列名

  • AS:说明视图要完成的操作

  • select_statement:定义视图的SELECT命令。视图中的SELECT命令不能包括ORDER BY等子句。

  • WITH CHECK OPTION:强制所有通过视图修改的数据必须满足select_statement语句中指定的选择条件。

视图的使用

视图的使用主要包括视图的检索,以及通过视图对基本表进行插入、修改、删除操作。视图的检索几乎没有什么限制,但是对通过视图实现表的插入、修改、删除操作则有一定的限制条件。

  • 使用视图检索数据:视图的查询总是转换为对它所依赖的基本表的等价查询

  • 通过视图修改数据:视图也可以使用INSERT语句插入行,当执行INSERT语句时,实际上是向视图所引用的基本表插入行。在视图中使用INSERT语句与在基本表中使用INSERT语句的格式完全一样。

如果视图中有下面所述属性,则插入、更新或删除操作将失败:

  • 视图定义中的FROM子句包含两个或多个表,且SELECT选择列表达式中的列包含来自多个表的列。

  • 视图的列是从集合函数派生的

  • 视图中的SELECT语句包含GROUP BY子句或DISTINCT选项

  • 视图的列是从常量或表达式派生的

视图的修改

# 修改视图
ALTER VIEW view_name [(Column[,...])] AS select_statement [WITH CHECK OPTION];

如果在创建视图时使用了WITH CHECK OPTION选项,则在使用ALTER VIEW命令时,也必须包括这些选项。

视图的删除

DROP VIEW {view_name} [,...];

提示:

  • 删除视图时,将从系统目录中删除视图的定义和有关视图的其他信息,还将删除视图的所有权限。

  • 使用DROP TABLE删除的表上的任何视图都必须用DROP VIEW命令删除。

(最近更新:2019年09月03日)

  • 2
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

课程大纲: 第1课 数据库与关系代数 综述数据库、关系代数、查询优化技术 综述数据库调优技术 预计时间1小时 第2课 数据库查询优化技术总揽 综述查询优化技术范围,包括查询重用、查询重写规则、查询算法优化、并行查询优化等 综述逻辑查询优化,包括子查询优化视图重写、等价谓词重写、条件化简、连接消除、非SPJ的优化等 综述逻辑物理优化,包括单表扫描算法、两表连接算法、多表连接算法、基于代价的算法等 初步理解MySQL查询执行计划。 预计时间1小时 第3课 查询优化技术理论与MySQL实践(一)------子查询优化(一) 第4课 查询优化技术理论与MySQL实践(二)------子查询优化(二) 从理论看,子查询包括的内容和范围,建立清晰的概念 从实践看,MySQL的子查询优化技术的内容和范围,明确掌握子查询优化手段 预计时间2小时,每小时一个课程段(子查询SQL查询优化的重点内容,务必掌握好) 第5课 查询优化技术理论与MySQL实践(三)------视图重写与等价谓词重写 什么是视图重写?哪些类型的视图可以被优化MySQL是怎么优化视图的?从而明白在MySQL中怎么写与视图相关的查询语句才能有好的效果? 什么是等价谓词重写?MySQL中怎么写WHERE子句有利于提高查询效率? 预计时间1小时 第6课 查询优化技术理论与MySQL实践(四)------条件化简 什么是条件化简?MySQL中对什么样的条件自动进行优化?如何写出可利用索引的条件语句? 预计时间1小时 第7课 查询优化技术理论与MySQL实践(五)------外连接消除、嵌套连接消除与连接消除 连接方式有些什么类型?不同类型的连接又是怎么优化的?外连接优化的条件是什么?MySQL中怎么写出可优化的连接语句?MySQL是否支持嵌套连接消除?MySQL是否支持连接消除?MySQL中书写SQL连接查询语句时的优化技巧。 预计时间1小时 第8课 查询优化技术理论与MySQL实践(六)------数据库的约束规则与语义优化 数据库的参照完整性(CHECKt NULL等)。什么是语义优化MySQL是否支持语义优化?怎么利用语义优化的思路人工进行SQL语句的优化? 预计时间1小时 第9课 查询优化技术理论与MySQL实践(七)------非SPJ的优化 什么是非SPJ优化? 从理论看,GROUP BY、ORDER BY、LIMIT、DISTINCT等怎么被优化MySQL中:GROUP BY是怎么优化的?ORDER BY是怎么被优化?LIMIT是怎么被优化?DISTINCT是怎么被优化? 非SPJ优化与索引的关系。 预计时间1小时 第10课 MySQL物理查询优化技术概述 从理论看,物理查询优化技术的范围。 从MySQL实践看,怎么利用物理查询优化技术对SQL查询语句调优? 本节预计会承接第9课的部分内容。 预计时间1小时 第11课 MySQL索引的利用、优化MySQL索引的角度出发,看各种SQL查询语句的优化怎么进行?(以前都是从语句的角度看怎么优化,现在站在索引的角度去总结SQL查询语句的优化) 预计时间1小时 第12课 表扫描与连接算法与MySQL多表连接优化实践 MySQL的单表扫描算法。MySQL的两表连接算法。MySQL的多表连接算法。 MySQL的多表连接的优化技巧。 预计时间1小时 第13课 查询优化的综合实例(一)------TPCH实践(一) 第14课 查询优化的综合实例(一)------TPCH实践(二) 以TPC-H国际标准的22条查询语句为实例,综合前面课程的内容,把所学的知识用于实践,进行综合的实战演练。 预计时间2小时(每个课时为1个小时) 第15课 关系代数对于数据库查询优化的指导意义------查询优化技术总结 再次回到理论,从理论的高度总结关系代数理论与MySQL查询优化实践的关系。真正认识、掌握MySQL查询优化技术,大步流星步入查询优化的高手之列。
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值