首页 > 解决方案 > 究竟什么是sql“视图”

问题描述

我想不同数据库的定义可能不同(我在问题中标记了几个数据库),但假设我有以下(伪代码):

CREATE VIEW myview FROM
SELECT * FROM mytable GROUP BY name

然后我可以像这样查询视图:

SELECT * FROM myview WHERE name like 'bob%'

在这种情况下,“视图”到底在做什么?它只是一个简写,和做的一样:

SELECT * FROM (
  SELECT * FROM mytable GROUP BY name
) myview WHERE name like 'bob%'

还是创建视图保留存储(或内存、索引等)?换句话说,创建和访问视图时发生的内部情况是什么?

标签: sql

解决方案


视图是指存储的 SQL 查询的名称。引用时,查询的定义在引用查询中被替换。它基本上是你描述的简写。

视图由标准定义,并且在所有数据库中几乎相同。

视图不会永久存储数据。每次引用它时,代码都会运行。一个警告是——在某些数据库中——视图可能是预编译的,所以预编译的代码实际上包含在查询计划中。

相比之下,一些数据库支持物化视图。这些是非常不同的野兽,它们确实存储数据。


推荐阅读