SQL效率 - 哪个更快?
我正在做一个批量插入,但在插入实际的表之前,我需要做一些检查。所以目前我正在插入临时表,但我刚刚看到可以声明表。所以我的问题是 - 哪个更快?创建或声明。该表将有多个SELECTS完成,并将包含大约200,000条记录。SQL效率 - 哪个更快?
DECLARE @tbl1 TABLE
(
col1 VARCHAR(10)
)
或
CREATE TABLE tbl1
(
col1 VARCHAR(10)
)
最后,是否有可能改变申报表?
谢谢你。
@tbl
表变量存储在内存中,但如果内存压力很高,他们will spill into tempdb。
根据设计(没有索引,统计数据等)在@tbl
变量上不允许DDL。
常规表在您连接的数据库中创建。
性能明智这一切取决于如何配置SQL Server以及将多少资源分配给tempdb。
一般来说,当处理大量记录时,我会去找一个像#table
这样的连接临时表,它允许统计表和丰富的表变量索引。
有时它可能是有意义的,有一个永久的登台表,但你必须特别小心与这种解决方案的并发性。
只有这样,你可以在这里一个明确的答案在您的环境测量(注意经常生产不同的配置到dev,心的那个)
我很确定表变量总是执行到tempdb的I/O。那么,我读到的大部分源代码都是这样的 - 不知道它是否在SQL 2008中进行了更改。 – 2010-08-03 08:29:54
@Adam查看我发布的链接,它来自SQL Server存储团队。表变量总是将IO执行到tempdb上,但是如果内存压力很低,可能会在内存中执行某些操作。他们将永远不会在您当前的数据库上执行IO。 – 2010-08-03 08:33:33
够公平的。这是一个有趣的阅读。这是我似乎总要谷歌提醒自己什么是行为是大声笑 – 2010-08-03 08:39:34
与创建两个示例脚本的大样本数据集和使用执行计划。我建议的唯一的事情是,管理表变量时很容易,因为它们在超出范围时清除它们 - 但是永久性登台表只需要创建一次。 – 2010-08-03 08:28:58