如果我在SQL Server中定义了这样的视图:
CREATE View V1
AS
SELECT *
FROM t1
INNER JOIN t2 ON t1.f1 = t2.f2
ORDER BY t1.f1
我是否应该期待
之间的性能差异SELECT * FROM V1 WHERE V1.f1 = 100
只是避免查看,就像这样
SELECT *
FROM t1
INNER JOIN t2 ON t1.f1 = t2.f2
WHERE t1.f1 = 100
ORDER BY t1.f1
除了需要集中复杂查询外,我们没有任何理由使用视图。
由于
答案 0 :(得分:5)
不应该有性能损失。
简化复杂查询是视图的用途。
如果性能是您所关注的 - 请阅读SQL Server中的indexed views:
索引视图提供了使用标准索引无法实现的额外性能优势。索引视图可以通过以下方式提高查询性能:
- 聚合可以预先计算并存储在索引中,以最大限度地减少查询执行期间的昂贵计算。
- 可以预先连接表格并存储结果数据集。
- 可以存储联接或聚合的组合。
答案 1 :(得分:0)
通常,您不应该期望性能差异,而是检查查询的执行计划。
如果要将Views加入Views,那么执行计划可能是次优的,并且包含对可能已合并的同一个表的重复访问。此外,观点和predicate pushing也可能存在问题。