iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 视图(View)原理解析
  • 334
分享到

MySQL 视图(View)原理解析

MySQL视图MySQLview 2022-05-31 09:05:27 334人浏览 八月长安
摘要

目录可更新视图视图的性能视图的限制Mysql 5.0以后引入了视图。视图实际是一个自身不存储数据的虚拟数据表。实际这个虚拟表的数据来自于访问视图的 sql 查询的结果。mysql 处理视图和处理数据表差不多,通过这种

目录
  • 可更新视图
  • 视图的性能
  • 视图的限制

Mysql 5.0以后引入了视图。视图实际是一个自身不存储数据的虚拟数据表。实际这个虚拟表的数据来自于访问视图的 sql 查询的结果。mysql 处理视图和处理数据表差不多,通过这种方式来满足很多需求。视图和数据表在 MySQL 中共享命名空间,然而 ,MySQL 处理而二者的方式并不相同,例如,视图没有触发器,并且无法使用 DROP TABLE 移除视图。

下面以 world 样例数据库为例来展示视图的工作机制。


CREATE VIEW Oceania AS
	SELECT * FROM Country WHERE Continent = 'Oceania'
  WITH CHECK OPTioN;

实现视图最简单的方式是执行SELECT查询语句并将结果放入到一张临时表中。之后,就可以在视图出现的地方引用这张临时表。例如下面的查询语句:


SELECT Code, Name FROM Oceania WHERE Name = 'Australia';

下面是服务端执行上面语句可能的形式(临时表名称是随意取的,实际内部不知道是什么):


CREATE TEMPORARY TABLE TMP_Oceania_123 AS 
	SELECT * FROM Country WHERE Continent = 'Oceania';
SELECT Code, Name FROM TMP_Oceania_123 WHERE NAME = 'Australia';

这种形式显然存在性能问题,最好的方式是将视图和查询的分布查询改为一句 SQL 语句,如下所示:


SELECT Code, Name FROM Country
WHERE Continent = 'Oceania' AND Name = 'Australia';

在 MySQL 中会使用两种算法,称之为 MERGE 和 TEMTABLE,而且会尽可能地使用 MERGE 算法。甚至,MySQL 能够将嵌套视图进行合并。下图是两种算法的区别:

当视图中有 GROUP BY,DISTINCT,聚集函数,UNION,子查询或其他数据表之间不是一对一的关系时,MySQL 会使用 TEMPTABLE算法。如果想知道视图是使用 MERGE 还是 TEMPTABLE,可以使用 EXPLaiN 指令检查:


EXPLAIN SELECT * FROM <视图名称>;

如果在 select_type 中有 DERIVED 的话,则表示使用了 TEMPTABLE 算法。因此,如果隐藏的衍生表需要很高的代价产生,EXPLAIN 就会变得性能很低并且执行起来很慢,这是因为它需要实际执行和构建衍生表。这个算法是视图的属性而不会受到查询类型的影响。例如,假设创建视图的时候指定了算法,那么以后针对这个视图的查询都不会更改算法,即便有优化的空间:


CREATE ALGoRITHM=TEMPTABLE VIEW v1 AS
SELECT * FROM Country;

可更新视图

可更新视图可以通过视图更新隐藏的基础表,只要指定的条件保持,就可以使用 UPDATE,DELETE 甚至是 INSERT 操作,就像操作普通表一样,例如下面的操作是有效的:


UPDATE Oceania SET Population = Population * 1.1 WHERE NAME = 'Australia';

如果视图包括 GROUP BY,UNION,聚合函数或其他的一些概念,那么该视图就不可更新。所有使用了 TEMPTABLE 算法的视图都不可以更新。

CHECK OPTION 子句用于保证任何通过视图更改的数据行在更改后需要保持与视图的 WHERE条件匹配。例如上面的例子,如果插入了一条 Continent 值不同的行,服务端就会报错。

视图的性能

很多人不会考虑使用视图提升性能,但是在某些情况下视图是可以提高性能的。而且还可以用视图去提升其他方面的性能,例如,在表结构重构时,被修改的数据表的视图不经修改也可以使用。还可以使用视图实现字段权限控制而不增加创建列权限的负荷:


CREATE VIEW public.employeeinfo AS
	SELECT firstname, lastname  --不包含身份证号
  FROM private.employeeinfo;
GRANT SELECT ON public.* to public_user;

使用 TEMPTABLE 算法的视图性能可能很糟糕(虽然也有可能比等效的 SQL 查询性能高)。这种视图可优化的空间不高。

视图可能让开发者误以为视图很简单,而事实上视图非常复杂。如果开发者不懂的试图的复杂性,那么就不会注意到视图与普通表查询之间的差别。如果使用EXPLAIN 指令的话有时候会发现产生上百行的分析结果输出,这是因为实际看起来是数据表的查询实际是视图,而视图可能引用其他数据表甚至是其他视图。

在使用视图改进性能时,需要仔细分析和测试。即便是 MERGE 算法的视图也会增加额外的负担,而且很难预测对性能的影响。视图实际在 MySQL 中使用了另外的优化途径。在高并发场景,视图可能导致查询优化器耗费大量时间在做计划和统计,甚至导致服务端卡顿。这个时候需要使用普通的 SQL 来替代视图。

视图的限制

MySQL 不像其他数据库服务器那样支持物理视图(物理视图即产生并将结果存在一个不可见的数据表中,并周期性地更新以从源数据刷新视图)。MySQL 也不支持视图的索引。MySQL 也不会保留视图的原始 SQL,如果我们视图通过执行 SHOW CREATE VIEW 指令去编辑视图,并且更改返回结果 SQL,会发现结果很奇特。查询SQL会按规范展开,并且使用内部的格式包裹,且没有格式化、注释和缩进。

以上就是MySQL 视图(View)原理解析的详细内容,更多关于MySQL 视图(View)原理的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 视图(View)原理解析

本文链接: https://www.lsjlt.com/news/10354.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL视图原理的示例分析
    这篇文章主要介绍MySQL视图原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:概述视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列...
    99+
    2024-04-02
  • springMVC中的view视图详细解析
    目录1、ThymleafView2、转发视图3、重定向视图4、视图控制器view-controllerSpring MVC中的视图是view接口,视图的作用是渲染数据,将模型mode...
    99+
    2024-04-02
  • mysql中视图原理的示例分析
    小编给大家分享一下mysql中视图原理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是视图视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视...
    99+
    2024-04-02
  • SpringBoot视图解析实现原理深入分析
    目录一、写在前面二、写个demo三、流程解析一、写在前面 前面我们分析了Spring boot是如何解析请求参数和如何处理相应信息的 那么它是如何进行视图解析,找到我们要跳转的视图并...
    99+
    2024-04-02
  • SpringMVC源码分析6:SpringMVC的视图解析原理
    转自 SpringMVC视图机制详解[附带源码分析]...
    99+
    2023-06-02
  • MySQL数据库——MySQL创建视图(CREATE VIEW)
    创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。 基本语法 可以使用 CREATE VIEW 语句来创建视图。 语法格式如下: CREATE VIEW AS 语法说明如下。 :指定...
    99+
    2023-09-08
    数据库 mysql sql
  • mysql视图之创建视图(CREATE VIEW)和使用限制实例详解
    本文实例讲述了mysql视图之创建视图(CREATE VIEW)和使用限制。分享给大家供大家参考,具体如下: mysql5.x 版本之后支持数据库视图,在mysql中,视图的几乎特征符合SQL:2003标准...
    99+
    2024-04-02
  • Linux命令:MySQL系列之六--VIEW视图/mysql -e
    视图VIEW命令简介:     VIEW视图就是存储下来的SELECT语句数据1.创建视图命令格式:   CREATE    [...
    99+
    2024-04-02
  • MySQL中view视图的作用是什么
    MySQL中的view视图是一个虚拟表,它包含了从一个或多个表中获取的数据的查询。它类似于实际的表,但没有自己的存储空间。view视...
    99+
    2023-09-07
    MySQL
  • SpringMVC视图和视图解析器实例分析
    这篇“SpringMVC视图和视图解析器实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringMVC视图和视图解...
    99+
    2023-07-02
  • 自定义视图view的折线图使用讲解
    目录一、如何绘制X和Y轴。1、我们来分析下,我们想知道三个坐标,那么这三个坐标是多少呢,我们该怎么计算呢? 答:这里,我是在onSizeChanged()方法中获取到了父类控件的宽度...
    99+
    2023-05-14
    自定义视图 自定义view 自定义view折线图
  • MySQL 视图(详解)
    文章目录 一,视图概念使用视图的原因 二,创建视图(1)基本语法(2)创建基于单表的视图【实例 1】【实例 2】 (3)创建基于多表的视图【实例 3】 (4)查询视图【实例 4...
    99+
    2023-09-06
    MySQL 视图 增删改查 知识
  • vue中view-model双向绑定基础原理解析
    利用Object.defineProperty进行数据劫持 代码如下 <!DOCTYPE html> <html lang="en"> <head>...
    99+
    2022-11-13
    vue中view-model双向绑定 vue双向绑定
  • SpringMVC超详细讲解视图和视图解析器
    目录SpringMVC-视图和视图解析器1.基本介绍2.自定义视图1.为什么要自定义视图2.自定义视图实例-代码实现3.自定义视图工作流程小结自定义视图-小结自定义视图-工作流程4....
    99+
    2024-04-02
  • 图文详解自定义View视图的属性及引用
    目录一、创建一个类,继承View二、如何创建自定义属性呢?2-1:创建一个资源文件2-2:打开我们创建好的资源文件,来写我们需要的属性,我简单的写了两个,如图:三、如何引用我们的自定...
    99+
    2023-05-14
    自定义View 自定义视图 View属性引用
  • mysql视图之管理视图实例详解【增删改查操作】
    本文实例讲述了mysql视图之管理视图操作。分享给大家供大家参考,具体如下: mysql提供了用于显示视图定义的SHOW CREATE VIEW语句,我们来看下语法结构: SHOW CREATE VIE...
    99+
    2024-04-02
  • 怎么理解mysql联合表及视图
    本篇内容介绍了“怎么理解mysql联合表及视图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1)验证环境 ...
    99+
    2024-04-02
  • MySQL xtrabackup 物理备份原理解析
    目录一、简介二、xtrabackup备份原理:三、xtrabackup备份流程四、xtrabackup常用命令选项:五、xtrabackup备份实践六、xtrabackup备份日志分析七、xtrabackup备份的gen...
    99+
    2022-12-21
    MySQLxtrabackup物理备份原理 MySQLxtrabackup 备份原理
  • uniapp小程序视图容器cover-view使用详解
    目录一,cover-view1.1 基础知识1.2 各平台差异1.3 不支持的CSS附:uni-app中cover-view覆盖原生组件总结一,cover-view 首先我们需要知道...
    99+
    2024-04-02
  • 解析MySQL join查询的原理
    MySQL用Nested-Loop Join算法实现join查询 区分驱动表和被驱动表,以驱动表的结果集为循环的基础,访问被驱动表过滤数据,然后合并结果,驱动表在外循环、被驱动表在内...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作