当前位置: 首页 > 面试题库 >

MySQL视图如何工作?

邓兴为
2023-03-14
问题内容

创建视图时,我基本上是在创建一个新表,当其中一个表中的数据发生变化时,该表将自动进行处理。那是对的吗?

另外,为什么我不能在视图中使用子查询?


问题答案:

视图的工作方式 类似于表 ,但不是表。它永远不存在;它只是在引用视图名称时运行的准备好的SQL语句。IE浏览器:

CREATE VIEW foo AS
  SELECT * FROM bar

SELECT * FROM foo

…相当于运行:

SELECT x.* 
  FROM (SELECT * FROM bar) x

MySQLDump将永远不会包含要插入视图中的行…

另外,为什么我不能在视图中使用子查询????

遗憾的是,这是出于(尽管是有问题的)设计。MySQL视图有很多限制,已记录在案:http : //dev.mysql.com/doc/refman/5.0/en/create-
view.html

因此,如果只是假想的表/准备好的语句,是否就意味着它在理论上具有与普通表/查询相同的性能(甚至更低)?

不可以。一个表可以具有关联的索引,这可以使数据检索更快(在插入/更新时要付出一定的代价)。一些数据库支持“物化”视图,即可以对其应用索引的视图-
考虑到有限的视图功能(这只在v5 IIRC中开始,很晚才开始),MySQL 不支持就 不足为奇了)。

由于视图是派生表,因此视图的性能仅取决于其建立的查询。如果该查询很烂,性能问题将只是滚雪球……也就是说,在查询视图时-
如果WHERE子句中的视图列引用未包装在函数中(IE :WHERE v.column LIKE ...不是 WHERE LOWER(t.column) LIKE ...),则优化器可能会推入条件(称为谓词)添加到原始查询中-使其速度更快。



 类似资料:
  • 问题内容: 我正在寻找一种列出数据库中所有视图的方法。 最初,我在MySQL论坛上找到并尝试了一个答案: 这怎么行不通,返回一个空集。(我知道他们在那里!) 这些也会失败: 为什么这不起作用? 问题答案: MySQL查询以查找数据库中的所有视图

  • 问题内容: 我对以下代码片段中的方法感到困惑。 我的困惑是关于以下几行。 函数有什么作用?我已经在很多地方看到了它的用法,但是我不明白它是如何解释其参数的。 如果我给函数赋负值作为参数会怎样?例如,如果我打电话给我怎么办? 谁能举例说明功能的主要原理? 问题答案: 视图功能旨在重塑张量。 说你有张量 是具有1到16(包括)的16个元素的张量。如果要重塑此张量以使其成为张量,则可以使用 现在将是张量

  • 我在类似的问题中搜索过,试过几个答案都没有解决..我有显示城市名称和一些数据的水平回收器视图,问题是我在主回收器视图适配器中的每个位置放置了如下图所示的画布条形图或RV图表,为了水平滚动该图表,我将图表放在水平滚动视图中,以便在从右向左滚动该图表时查看长水平方向上的图表数据,反之亦然,但实际上它并不水平滚动,只有主回收器视图水平滚动到 当触摸它时显示城市,当触摸它滚动(冻结)时RV内的图表没有滚动

  • 问题内容: 我知道SQL的语法如下: 但是,我不了解它是如何工作的,可能是因为我正在考虑将其视为声明。 例如,如果我在表中有一个字段,其中包含诸如“经理”,“兼职”等名称,那么如何根据角色生成一个具有不同编号的字段。在此示例中,“如果user_role =’经理’,则role_order = 5”。 请注意,我正在寻找一个 教男人如何钓鱼的方法, 而不是 给男人一个钓鱼的方法 。 问题答案: 更像

  • 问题内容: 我有一张约有100,000个用户的表。 第一种情况: 当我为上述查询做一个解释计划时,我得到的费用为5200 第二种情况: 当我对第二个查询做一个解释计划时,我得到的费用为100,000。 视图中的where子句如何工作?在视图检索所有行之后是否应用where子句?如何解决此问题? 问题答案: 这是关于已使用的视图算法的。 该 合并 算法行之有效最表的索引和诸如此类的东西-的 不是Te

  • 主要内容:基本语法,删除视图删除视图是指删除 MySQL 数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。 基本语法 可以使用 DROP VIEW 语句来删除视图。 语法格式如下: DROP VIEW <视图名1> [ , <视图名2> …] 其中: 指定要删除的视图名。DROP VIEW 语句可以一次删除多个视图,但是必须在每个视图上拥有 DROP 权限。 删除视图 【实例】删除 v_students_