SQL Server 查看性能
Posted
技术标签:
【中文标题】SQL Server 查看性能【英文标题】:SQL Server Views performances 【发布时间】:2011-01-05 11:37:12 【问题描述】:如果我在 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
?
除了需要集中复杂查询之外,我们没有任何理由使用视图。
谢谢
【问题讨论】:
ORDER BY
在视图中不起作用。有一些问题(TOP 100 PERCENT),但是随着优化器的改进,它变得毫无意义。如果您需要特定的订单,则必须在最外层的查询中指定它。
在使用 where 子句 WHERE t1.f1 = 100 后使用 order by t1.f1 没有任何意义。即使结果集包含多行,此 order by 也无济于事
【参考方案1】:
应该没有性能损失。
简化复杂的查询是视图的用途。
如果您关心性能问题 - 请阅读 SQL Server 中的 indexed views:
索引视图提供了使用标准索引无法实现的额外性能优势。索引视图可以通过以下方式提高查询性能:
可以预先计算聚合并将其存储在索引中,以最大限度地减少查询执行期间昂贵的计算。 可以预先加入表并存储生成的数据集。 可以存储连接或聚合的组合。
【讨论】:
【参考方案2】:通常,您不应期望性能差异,但请检查查询的执行计划。
如果您将视图加入视图,则执行计划可能不是最优的,并且包含对可能已合并的同一个表的重复访问。视图和predicate pushing 也可能存在问题。
【讨论】:
以上是关于SQL Server 查看性能的主要内容,如果未能解决你的问题,请参考以下文章