SQL中视图和物化视图的区别
视图
视图是充当实际关系的虚拟关系。它不是数据库系统逻辑关系模型的一部分。视图的元组不存储在数据库系统中,每次访问视图时都会生成视图的元组。视图的查询表达式存储在数据库系统中。
如果我们可以使用实际的关系,则可以在任何地方使用视图。视图可用于根据特定用户的需要创建自定义虚拟关系。我们可以在数据库系统中创建任意数量的视图。
物化视图
当视图表达式的结果存储在数据库系统中时,它们被称为物化视图。SQL 没有提供任何定义物化视图的标准方法,但是一些数据库管理系统提供了自定义扩展来使用物化视图。保持物化视图更新的过程称为视图维护。
数据库系统使用以下三种方式之一来保持物化视图的更新:
- 一旦定义它的关系更新,就立即更新物化视图。
- 每次访问视图时更新物化视图。
- 定期更新物化视图。
当视图被频繁访问时,物化视图很有用,因为它节省了计算时间,因为结果预先存储在数据库中。在定义视图的关系非常大并且视图的结果关系非常小的情况下,物化视图也很有帮助。物化视图具有与之相关的存储成本和更新开销。
视图和物化视图的区别
视图 | 物化视图 |
---|---|
查询表达式存储在数据库系统中,而不是查询表达式的结果元组。 | 查询表达式的结果元组存储在数据库系统中。 |
每次更新定义视图的关系时都不需要更新视图,因为每次访问视图时都会计算视图的元组。 | 当元组存储在数据库系统中时,物化视图会更新。它可以根据上述数据库系统以三种方式之一进行更新。 |
视图没有任何与之相关的存储成本。 | 物化视图确实有与之相关的存储成本。 |
视图没有任何与之相关的更新成本。 | 物化视图确实有与之相关的更新成本。 |
有一个定义视图的 SQL 标准。 | 没有用于定义物化视图的 SQL 标准,并且该功能由一些数据库系统作为扩展提供。 |
当不经常访问视图时,视图很有用。 | 当视图被频繁访问时,物化视图是有效的,因为它通过预先存储结果来节省计算时间。 |