如何快速检索大量数据?

时间:2019-12-03 06:43:24

标签: sql sql-server

我需要从“ 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)

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。

相关问题