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 查看性能的主要内容,如果未能解决你的问题,请参考以下文章

表与视图 SQL Server 的性能

SQL Server 数据库性能优化

SQL Server 数据库性能优化

[转] SQL Server 数据库性能优化

SQL Server 数据库性能优化

sql server 性能调优之 当前用户请求分析