【问题标题】:Ok to use temp tables and table variable in the same stored procedure?可以在同一个存储过程中使用临时表和表变量吗?
【发布时间】:2013-01-15 22:52:37
【问题描述】:

我的存储过程中有一个选择返回 4000 + 行。我打算把它做成一个临时表,以便稍后在程序中处理数据。

我还有其他各种只返回 100-300 行的选择。我打算制作这些表变量,以便在稍后的过程中处理。

是否可以在同一过程中使用临时表和表变量,或者这会导致任何性能问题?

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    是的,没关系。

    至于编程实践,如果我正在阅读存储过程,我会更喜欢一种类型(并且倾向于表变量)。但是,您可能有充分的理由使用其中一个,例如需要临时表上的索引或将其用于select into,然后继续。

    【讨论】:

      【解决方案2】:

      这就是你需要寻找全套选项的地方sommarskog.se - share_data

      能够为临时表添加各种索引是我有时会选择临时表的一个特别原因。

      为了避免连续命中临时数据库,如果不需要索引,那么我将使用表变量。

      现在我经常使用很多CTEs,它们一起工作,避免使用任何类型的物化表。

      经典答案 - “视情况而定!”

      【讨论】:

      • 我将支持经典答案。尝试使用临时表和表变量,看看哪个更适合您的用例。我还要注意 CTE。它们可能会导致性能不佳,因为它们的结果没有被缓存,因此如果在连接中使用完整的 CTE 查询,最终可能会一次又一次地执行。
      【解决方案3】:

      我觉得这里有很多我们不知道的因素,比如你们公司的资源,你们的时间限制等等。

      一般来说,为此目的使用临时表是可以的。和 100-300 行(在选择中提到) - 那是花生。不用担心。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 2021-02-11
        相关资源
        最近更新 更多