SQL效率-哪个更快?
我正在进行批量插入,但在插入到实际表之前,我需要做一些检查。目前我正在插入一个临时表,但我刚刚看到可以声明表。所以我的问题是-哪个更快?创建或声明。该表将进行多次选择,并将包含大约200000条记录SQL效率-哪个更快?,sql,tsql,performance,Sql,Tsql,Performance,我正在进行批量插入,但在插入到实际表之前,我需要做一些检查。目前我正在插入一个临时表,但我刚刚看到可以声明表。所以我的问题是-哪个更快?创建或声明。该表将进行多次选择,并将包含大约200000条记录 DECLARE @tbl1 TABLE ( col1 VARCHAR(10) ) 或 最后,是否可以更改已声明的表 感谢您的支持。@tbl表变量存储在内存中,但如果内存压力很高,它们会被释放 根据设计,@tblvars上不允许使用DDL(无索引、统计等) 常规表是在所连接的数据库中创建的 就性能而
DECLARE @tbl1 TABLE
(
col1 VARCHAR(10)
)
或
最后,是否可以更改已声明的表
感谢您的支持。
@tbl
表变量存储在内存中,但如果内存压力很高,它们会被释放
根据设计,@tbl
vars上不允许使用DDL(无索引、统计等)
常规表是在所连接的数据库中创建的
就性能而言,这完全取决于SQL Server的配置方式以及分配给tempdb的资源数量
一般来说,在处理大量记录时,我会选择一个每个连接的临时表,如#table
,它允许对表变量进行统计和丰富的索引
有时,有一个永久的临时表可能是有意义的,但是您必须特别小心与这种解决方案的并发性
在这里,您可以得到明确答案的唯一方法是在您的环境中进行测量(注意,生产配置通常与开发不同,请注意)
@tbl
表变量存储在内存中,但如果内存压力很高,它们就会被释放
根据设计,@tbl
vars上不允许使用DDL(无索引、统计等)
常规表是在所连接的数据库中创建的
就性能而言,这完全取决于SQL Server的配置方式以及分配给tempdb的资源数量
一般来说,在处理大量记录时,我会选择一个每个连接的临时表,如#table
,它允许对表变量进行统计和丰富的索引
有时,有一个永久的临时表可能是有意义的,但是您必须特别小心与这种解决方案的并发性
您在这里获得最终答案的唯一方法是在您的环境中进行测量(请注意,生产的配置通常与开发不同,请注意)使用大型样本数据集创建两个样本脚本,并使用执行计划。我唯一建议的是,当表变量超出范围时,可以很容易地管理它们,因为它们会被清除,但是永久性的临时表只需要创建一次。创建两个带有大样本数据集的样本脚本,并使用执行计划。我唯一建议的是,当表变量超出范围时,可以很容易地管理它们,但永久性的临时表只需要创建一次。我相当肯定,表变量总是在tempdb上执行I/O。嗯,我读到的大多数资料都说明了这一点——不确定它是否在SQL 2008中发生了更改。@Adam看到了我发布的链接,它来自SQL Server存储团队。表变量总是在tempdb上执行IO,但如果内存压力低,可能会在内存中执行填充。他们永远不会在您当前的数据库上执行IO。那是一本有趣的书。这是我似乎总是不得不在谷歌上提醒自己的行为是什么,所以当我不得不更改表时,是否不可能使用DECLARE。我相当肯定,表变量总是在tempdb上执行I/O。嗯,我读到的大多数资料都说明了这一点——不确定它是否在SQL 2008中发生了更改。@Adam看到了我发布的链接,它来自SQL Server存储团队。表变量总是在tempdb上执行IO,但如果内存压力低,可能会在内存中执行填充。他们永远不会在您当前的数据库上执行IO。那是一本有趣的书。这是我似乎总是不得不谷歌提醒自己的行为是什么,所以当我不得不改变表是不可能使用声明。
CREATE TABLE tbl1
(
col1 VARCHAR(10)
)