2011-05-06 52 views
1

我已经1 temporary table和我做一样的东西:3种不同的插入#table并行的SQL Server 2008中选择

Insert into #table1 select ... from #temporal 
Insert into #table2 select ... from #temporal 
Insert into #table3 select ... from #temporal 

由于每一个选择需要相当长的时间,我想paralelize这3个查询有没有在SQL Server 2008这样做的方法?

+0

为什么要将相同的数据集放入这些表中?你能不能在你的其他代码中使用#temporal?你可以索引#时间,它可能会更快。 – HLGEM 2011-05-06 18:16:37

+0

我需要3个时间表,他们的结果是不同的(3个不同领域的表) – cMinor 2011-05-06 18:22:06

回答

0

听起来像问题的根源在于SELECT from #temporal是一个性能问题。你有临时表#temporal的索引吗?有可能索引(或统计更新)可以帮助您避免编写更多代码来解决此问题。

您是否能够或者您是否曾尝试过将性能测试结果存储在其中?#temporal SELECT成为表变量?

DECLARE @myTemporal TABLE (id int, foo varchar(100)) 
INSERT INTO @myTemporal (id, foo) 
    SELECT id, foo FROM #temporal; 

然后你ň插件可从表变量拉动,而不是昂贵/ nonperformant查询。

Insert into #table1 select id, foo from @myTemporal; 
Insert into #table2 select id, foo from @myTemporal; 
Insert into #table3 select id, foo from @myTemporal; 

好处是您不必对临时表执行SELECT 3x。你会从表变量中插入你的3个临时表。所有行,没有WHERE子句。

+0

那么,原因是因为我需要3个时间表,他们将用于其他storeprocedure ... – cMinor 2011-05-06 18:20:52

+0

@dark:很明显,你需要3个临时表。如果它的性能适合你的环境,我建议你通过表变量加载它们。 – 2011-05-06 18:22:47

+0

因此使用@tablevar比#tempTable更好?为什么? – cMinor 2011-05-06 18:24:08