sql - 究竟什么是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 查询的名称。引用时,查询的定义在引用查询中被替换。它基本上是你描述的简写。
视图由标准定义,并且在所有数据库中几乎相同。
视图不会永久存储数据。每次引用它时,代码都会运行。一个警告是——在某些数据库中——视图可能是预编译的,所以预编译的代码实际上包含在查询计划中。
相比之下,一些数据库支持物化视图。这些是非常不同的野兽,它们确实存储数据。
推荐阅读
- android - React Native Maps - 带有自定义图像标记的 Android 应用程序崩溃
- android - 如何在 Kotlin 中设置从服务到活动的回调?
- redis - Redis 将大数据复制到新的从站
- java - Hibernate 分页查询不返回 DB2/400 方言的记录
- c# - 无法在 Razor 页面中选择单选按钮
- android - 使用 DiffUtil.ItemCallback 时,来自 ListAdapter 的初始数据会被删除
- php - 重定向到上一个 url,其他 url 除外
- javascript - 如何使用输入变量创建 json 对象
- reactjs - 在没有 API 调用或设置超时的情况下在登录页面中显示和隐藏加载程序?
- javascript - 重构打字稿中的长函数