为什么临时表比表变量更快?

时间:2013-07-12 17:21:52

标签: sql-server join table-variable temp-tables

为什么临时表比SQL Server中的连接的表变量更快?

注意:在这两种情况下,表都有PK,表通过PK与其他“物理”表连接。

2 个答案:

答案 0 :(得分:10)

两者都存在于Tempdb中;但是,性能问题会起作用,因为优化器不会维护表变量的统计信息。这是有问题的,因为优化器总是假设表变量中有1行。显然,这可能会破坏查询计划,尤其是当表变量中有很多行时。我不会使用表变量来存储超过1000行的任何内容;否则,表现可能无法预测。

答案 1 :(得分:4)

临时表与表类似,但它们在创建时存储在tempdb中,这意味着优化器可以创建它们的统计信息,而表变量与变量类似,并且没有统计信息。在比较tmp表与表时不相同变量,临时表排在最前面。 原因是查询优化器有时会为表变量生成糟糕的计划。当有大量数据时,通常可以看到这种情况。我能说的最重要的一点是,与为临时表生成的计划相比,表变量更有可能导致不可预测的执行计划。另一方面,临时表将导致更多的重新编译。