SQL效率 - 哪个更快?

问题描述:

我正在做一个批量插入,但在插入实际的表之前,我需要做一些检查。所以目前我正在插入临时表,但我刚刚看到可以声明表。所以我的问题是 - 哪个更快?创建或声明。该表将有多个SELECTS完成,并将包含大约200,000条记录。SQL效率 - 哪个更快?

DECLARE @tbl1 TABLE 
(
col1 VARCHAR(10) 
) 

CREATE TABLE tbl1 
(
col1 VARCHAR(10) 
) 

最后,是否有可能改变申报表?

谢谢你。

+0

与创建两个示例脚本的大样本数据集和使用执行计划。我建议的唯一的事情是,管理表变量时很容易,因为它们在超出范围时清除它们 - 但是永久性登台表只需要创建一次。 – 2010-08-03 08:28:58

@tbl表变量存储在内存中,但如果内存压力很高,他们will spill into tempdb

根据设计(没有索引,统计数据等)在@tbl变量上不允许DDL。

常规表在您连接的数据库中创建。

性能明智这一切取决于如何配置SQL Server以及将多少资源分配给tempdb。

一般来说,当处理大量记录时,我会去找一个像#table这样的连接临时表,它允许统计表和丰富的表变量索引。

有时它可能是有意义的,有一个永久的登台表,但你必须特别小心与这种解决方案的并发性。

只有这样,你可以在这里一个明确的答案在您的环境测量(注意经常生产不同的配置到dev,心的那个)

+0

我很确定表变量总是执行到tempdb的I/O。那么,我读到的大部分源代码都是这样的 - 不知道它是否在SQL 2008中进行了更改。 – 2010-08-03 08:29:54

+0

@Adam查看我发布的链接,它来自SQL Server存储团队。表变量总是将IO执行到tempdb上,但是如果内存压力很低,可能会在内存中执行某些操作。他们将永远不会在您当前的数据库上执行IO。 – 2010-08-03 08:33:33

+0

够公平的。这是一个有趣的阅读。这是我似乎总要谷歌提醒自己什么是行为是大声笑 – 2010-08-03 08:39:34