Sql server 将临时表代码转换为CTE以提高性能
我的存储过程中有以下代码:Sql server 将临时表代码转换为CTE以提高性能,sql-server,Sql Server,我的存储过程中有以下代码: CREATE MyProc AS CREATE TABLE #Table1 ( Field1 INT NOT NULL, Field2 VARCHAR NULL, Field3 VARCHAR NULL, Field4 VARCHAR NULL ); ---填充临时表--- INSERT INTO #Table1 (Field1) SELECT val1 FROM Tab1 INSERT INTO #Table1
CREATE MyProc
AS
CREATE TABLE #Table1
(
Field1 INT NOT NULL,
Field2 VARCHAR NULL,
Field3 VARCHAR NULL,
Field4 VARCHAR NULL
);
---填充临时表---
INSERT INTO #Table1 (Field1)
SELECT val1 FROM Tab1
INSERT INTO #Table1 (Field1,Field2)
SELECT val1,"val2" FROM Tab2
INSERT INTO #Table1 (Field1,Field2,Field3)
SELECT val1,"val2","val3" FROM Tab3
INSERT INTO #Table1 (Field1,Field2,Field3,Field4)
SELECT val1,"val2","val3","val4" FROM Tab3
SELECT Field1,Field2,Field3,Field4 FROM #Table1
DROP #Table1
大约有10-15条INSERT语句填充临时表。我想使用CTE或其他方法优化存储过程以提高性能。如何重写该过程?我不完全确定这在任何方面是否会更好,但这是使用CTE来获得与我使用一些懒驴值数组相同的输出让它开箱即用,你当然可以用实际的表格代替它们:
with cte (f1, f2, f3, f4)
as (
select 1, null, null, null
from (
values (1)
) t1(n1)
union all
select 1, 2, null, null
from (
values (1, 2)
) t1(n1, n2)
union all
select 1, 2, 3, null
from (
values (1, 2, 3)
) t1(n1, n2, n3)
union all
select 1, 2, 3, 4
from (
values (1, 2, 3, 4)
) t1(n1, n2, n3, n4)
)
select *
from cte
为什么你认为CTE会提高性能?我也这么想,但我有一个顾虑。太多的联盟都会影响性能吗?如果不知道您的设置和使用的很多详细信息,我和其他任何人都无法回答这一问题。我的建议是,测试一下。布丁的证据在于吃;测试时,请务必小心,不要弄坏工作正常的东西!