我需要从“ INCLUDE_NUMBER_T”中获取6个数字,并在所有情况下都将其数字放入“ NUMBER_TOTAL_T”中。
运行大约需要37秒,我想运行得更快。
INCLUDE_NUMBER_T个数据
includeNum
----------
1
2
3
4
5
6
7
8
.
.
.
NUMBER_TOTAL_T个示例数据
num1 num2 num3 num4 num5 num6
1 2 3 4 5 6
2 3 4 5 6 7
2 4 5 6 7 8
.
.
.
我的SQL代码
;WITH TEMP(N) AS (
SELECT includeNum
FROM INCLUDE_NUMBER_T
)
INSERT INTO NUMBER_TOTAL_T(num1, num2, num3, num4, num5, num6,createTime)
SELECT num1.N
,num2.N
,num3.N
,num4.N
,num5.N
,num6.N
,dbo.FncGetToday()
FROM TEMP num1
JOIN TEMP num2
ON num2.N > num1.N
JOIN TEMP num3
ON num3.N > num2.N
JOIN TEMP num4
ON num4.N > num3.N
JOIN TEMP num5
ON num5.N > num4.N
JOIN TEMP num6
ON num6.N > num5.N
ORDER BY NEWID()
OPTION(MAXRECURSION 1)
答案 0 :(得分:0)
INCLUDE_NUMBER_T
中有多少行?如果数据像您的示例一样,也许您可以尝试查询sql:
insert into NUMBER_TOTAL_T (num1, num2, num3, num4, num5, num6, createTime)
select
a.includeNum as num1,
b.includeNum as num2,
c.includeNum as num3,
d.includeNum as num4,
e.includeNum as num5,
f.includeNum as num6,
getdate()
from INCLUDE_NUMBER_T a
inner join INCLUDE_NUMBER_T b on a.includeNum+1=b.includeNum
inner join INCLUDE_NUMBER_T c on b.includeNum+1=c.includeNum
inner join INCLUDE_NUMBER_T d on c.includeNum+1=d.includeNum
inner join INCLUDE_NUMBER_T e on d.includeNum+1=e.includeNum
inner join INCLUDE_NUMBER_T f on e.includeNum+1=f.includeNum
函数getdate()
用于获取当前日期时间。如果该查询仍然很慢,则可以尝试将索引添加到includeNum
中的列INCLUDE_NUMBER_T
中。在这里查询添加索引:
CREATE INDEX idx_indexname ON INCLUDE_NUMBER_T(includeNum)
我已经用表INCLUDE_NUMBER_T
中的1000000条记录进行了测试,并且只能得到<10s。