代码之家  ›  专栏  ›  技术社区  ›  Fredou

这两种桌子有什么区别?(α,@)

  •  1
  • Fredou  · 技术社区  · 15 年前

    A和A的区别是什么? 我的表 和A 声明@myable表

    5 回复  |  直到 15 年前
        1
  •  3
  •   rahul    15 年前

    在存储过程中,通常 需要存储一组数据 在程序中,没有 需要这些数据 坚持超出 程序。如果你真的需要 表结构,基本上有 四种方法可以“存储”此数据: 本地临时表(表名), 全局临时表 (表名),永久表 (表名)和表变量 (@表名)。

    Should I use a #temp table or a @table variable?

    本地和全局临时表 是tempdb中的物理表吗? 数据库,可以创建索引 因为临时表是物理的 表,还可以创建主 通过创建表键入它们 命令或通过alter表 命令。你可以用改变表 添加任何默认值的命令,新建 列或需要的约束 在你的代码中。

    不同于本地和全球临时 表,表变量不能有 在它们上创建了索引。例外 表变量可以有一个 创建时定义的主键 使用declare@variable表 命令。这将创建一个 上的聚集索引或非聚集索引 表变量。创建索引 命令无法识别表 变量。因此,唯一的指标 对你可用的索引是 与主键一起使用,并且 在表变量上创建 宣言。此外,不记录表变量的事务日志。因此,它们超出了交易机制的范围。

        2
  •  1
  •   Mitch Wheat    15 年前

    请参阅:

    通常说,@table变量保存在内存中,而不是tempdb; 这不一定是正确的。

    表变量没有统计信息,这可能会影响某些情况下的性能。

        3
  •  1
  •   Luke Bennett    15 年前

    当处理相对较小的数据集时,表变量都很好,但是要注意它们不能很好地伸缩。特别是,在SQL Server 2000和SQL Server 2005之间的行为变化导致性能下降,数据集很大。

    在SQL Server 2000上有一个非常复杂的存储过程,这对我来说是一个特别讨厌的错误。研究和测试表明,使用表变量是更有效的方法。但是,在升级到SQL Server 2008之后,性能下降 相当地 .使用表变量作为罪魁祸首花了一段时间,因为之前所有的测试等都排除了温度表更快的可能性。但是,由于SQL Server版本之间的这种变化,现在正好相反,经过一次重大的重构之后,需要花费两位数的时间才能完成的工作在几分钟内就开始完成了!

    所以要知道,对于哪一个最好,没有明确的答案——你需要评估你的情况,进行你自己的测试,并根据你的发现做出决定。并始终在服务器升级后重新评估。

    阅读本文了解更多详细信息和示例计时- http://www.sql-server-performance.com/articles/per/temp_tables_vs_variables_p1.aspx

    更新: 另外,请注意还有第三种类型的临时表-xyz。这些是全局的,对所有SQL Server连接都可见,并且不象常规临时表那样限定到当前连接的范围。只有当访问它的最终连接关闭时,才会删除它们。

        4
  •  0
  •   Robert    15 年前

    myTable是一个临时表,它有利于约束和索引等,并使用更多的资源。

    @MyTable是一个表变量,您将其定义为具有一个或多个列。它们使用较少的资源,并且其范围与您在其中使用它们的过程相同。

    在大多数情况下,如果使用临时表,则可以使用表变量,这可能会带来性能优势。

        5
  •  0
  •   Himadri    15 年前

    桌子 #tabel1 是存储在tempdb中的本地临时表。 ##table1 是存储在tempdb中的全局临时表。

    @table 是表变量。

    检查 link 因为他们的不同