【问题标题】:WITH Common Table Expression vs. CREATE VIEW performanceWITH 公用表表达式与 CREATE VIEW 性能
【发布时间】:2010-11-16 12:19:45
【问题描述】:

我有几个使用 WITH 子句或公用表表达式的查询,并使用 UNION ALL 语句在 SQL Server 中具有树状结构的表中递归,如 here 所述。如果我要创建相同的 VIEW 而不是将其包含在 WITH 子句中并在每次运行查询时生成它,我会看到性能差异吗?由于它用于多个查询,因此通常认为实际创建视图是一种好习惯吗?

【问题讨论】:

    标签: sql sql-server recursion performance


    【解决方案1】:

    您看到的是Common Table Expression,而不是View。如果您正在使用recursion,则需要坚持使用 CTE,而不是尝试将其滚动到视图中。

    MS SQL 中的视图不会给您带来任何性能优势,除非您使用它们的 creating clustered indexes。从你的问题的声音来看,情况并非如此。最好将 CTE 封装在 stored procedure 中。

    【讨论】:

    • msdn.microsoft.com/en-us/library/ms190766.aspx 看起来公用表表达式是我当前使用的 WITH 子句。 CTE 和创建实际 VIEW 之间是否存在性能差异?
    • 不,只要它们都使用相同的查询执行计划,应该没有性能差异。
    • @Scott:如果在多个地方使用相同的 CTE - 函数、过程等 - 您是否同意创建视图而不是拥有多个相同的单独实例代码?假设它不是索引(AKA 物化)视图。
    • 当然,我会继续这样做 - 只要您的 CTE 代码可以在视图主体中工作(我认为它应该)。将其放在视图中将简化使用相同代码的所有其他查询。
    猜你喜欢
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多