【发布时间】:2023-03-12 00:33:01
【问题描述】:
我有 sql 视图,我正在从这样的视图中获取值
select * from MyView where date > 'anydate'。
我的问题: 这个 where 子句什么时候执行?一旦所有记录都按视图返回?
【问题讨论】:
-
查询的执行计划回答了您的问题。拿来看看。
我有 sql 视图,我正在从这样的视图中获取值
select * from MyView where date > 'anydate'。
我的问题: 这个 where 子句什么时候执行?一旦所有记录都按视图返回?
【问题讨论】:
你实际上在做的是,你告诉数据库从它的记录中选择一些日期大于特定日期的数据,所以它只会从最后一个命令中执行它,我只会选择日期所在的数据大于特定日期
【讨论】:
视图有点像其他语言中的宏 - 它们实际上是一个“片段”,您可以将其插入到更大的查询中。
更大的查询被优化作为一个整体1。来自任何视图的表引用、谓词等与提交的查询文本中明确写入的表引用、谓词等无关。
因此,如果您在视图中有一个WHERE 子句和一个您在查询视图时应用的WHERE 子句,则两者都被同等考虑。两者都不能保证在其他2之前或之后被评估。
1除非使用视图物化的功能,在这种情况下,视图“结果”数据将与针对视图的任何查询分开存储和更新。 SQL 数据库产品是否支持此类功能、维护方式等的具体细节有所不同。
2根据 SQL 中的一般原则,您告诉系统您想要什么,而不是如何做。由优化器决定操作发生的顺序,只要它在逻辑上是一致的。
【讨论】: