如果 VIEW 的定义有 QUALIFY 子句,当从视图中进行选择时,WHERE 子句是下推,还是在应用 WHERE 子句之前评估整个视图 SQL?
例如,
CREATE VIEW vw_some_table (
table_id,
fk_id,
type_cd,
insert_dt
)
AS SELECT
table_id,
fk_id,
type_cd
FROM some_table
QUALIFY row_number() OVER (PARTITION BY fk_id ORDER BY insert_dt DESC) == 1
使用 SQL:
SELECT *
FROM vw_some_table
WHERE type_cd = 'TYPE1'
如果我们使用您的示例,则
WHERE
子句过滤 type_cd = 'TYPE1'
可能会被下推并在窗口函数和 QUALIFY
子句之前应用,前提是优化器认为它更有效并且这样做不会影响查询,但如果优化器无法保证正确性或不支持此类优化,则将在视图的 SQL 完全评估后应用 WHERE
子句。