显然有两种方法可以在 SQL-Server 中创建临时表:
带表变量(table variable)
DECLARE @tmp TABLE (Col1 INT, Col2 INT)
或使用临时表(临时表)
CREATE TABLE #tmp (Col1 INT, Col2 INT)
它们之间有什么区别?
显然有两种方法可以在 SQL-Server 中创建临时表:
带表变量(table variable)
DECLARE @tmp TABLE (Col1 INT, Col2 INT)
或使用临时表(临时表)
CREATE TABLE #tmp (Col1 INT, Col2 INT)
它们之间有什么区别?
临时表 (#tmp) 和变量 (@tmp) 之间存在一些差异,尽管 tempdb 的使用不是其中之一,如下面的 MSDN 链接中所述。
作为一般规则,对于中小型数据量和简单的使用场景,您应该使用表变量。(这是一个过于宽泛的指导方针,当然有很多例外 - 请参见下文和后续文章。)
在它们之间进行选择时需要考虑的几点:
一些进一步的阅读:
Martin Smith在 dba.stackexchange.com 上的出色回答
MSDN FAQ 关于两者的区别:http: //support.microsoft.com/default.aspx/kb/305977
MDSN 博客文章:http: //blogs.msdn.com/sqlserverstorageengine/archive/2008/03/30/sql-server-table-variable-vs-local-temporary-table.aspx
文章:http ://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1267047,00.html#
从 SQL SERVER 2008 版本开始,使用了 TABLE 类型变量,它们只在代码块执行期间有效。
这些表是在 tempdb 数据库中名为 Temporary Tables 的文件夹中创建的。如果我们关闭当前连接,该表将被删除。
表变量仅在短时间内有效,仅在正在执行的代码块期间有效。
有局部和全局临时表,它们仅在打开的一个或多个连接期间有效。
在实践中,经过反复试验以获得更快的速度,在一般情况下,您应该:
当数据是很少的列和行时,使用变量表
@tabla
,例如。最大限度。10 列和少于 10,000 条记录,您不必对表进行更改 (update
,delete
,insert
)。请记住,它存储在 RAM 内存中,因此它取决于您的服务器。当您有数千条记录和/或需要更新表中的数据时,使用临时表
#tabla
或##tabla
(全局,即在所有会话中)。有时,当您创建它时,如果您有超过 10,000 行,那么创建主索引PK
和/或用于数据查询的优化索引非常有效。尝试这两个选项并测量性能,根据具体情况,它会给你一个对你的特定情况更有效的答案,将结果从 a 更改为 相对
select into @mitabla
容易select into #mitabla
。从专业实践中的一个拙见,希望它可以帮助你......
1)以表为变量,数据量为20,000条记录我的
temdb
=> 开始膨胀DECLARE @vCodigos TABLE (Codigo1 varchar(50), Codigo2 varchar(50))
2)使用具有相同记录的临时表开始让我膨胀,
temdb
尽管程度较小3)
tempdb
并使用 WITH,它在不影响=>的情况下更好、更高效WITH tblCodigos AS (SELECT A.codigo AS Codigo1, B.codigo2)