如何提高 SQL 服务器中大数据的提取速度

How to increase fetching speed of large data in SQL Server

以下是我的查询,它需要 2:26 分钟从 SQL Server 2008 R2 数据库

中获取 9'619'516 条记录

查询:

SELECT 
    SERVERID, MSGID, BPID, FLOWID, FSID, FSSTEP, 
    MESSAGETYPEID, MESSAGESTRING, USERBLOB, USERCODE, 
    CREATEDATE, CREATETIME, OBJECTLEVEL, CATEGORY, 
    USERKEY1, USERKEY2, VERSIONKEY, STATUSCODE, SEVERITY, 
    EXTENSION, PROJECTKEY, BLOBEXISTS, ROOTFSID, 
    FLOWREQUESTID, FILELOCATION, RUNID, 
    TEMP_MGXPI4_1.DateTimeObject, TEMP_MGXPI4_1.TEMP_ROW_NUM 
FROM
    (SELECT 
         SERVERID, MSGID, BPID, FLOWID, FSID, FSSTEP, 
         MESSAGETYPEID, MESSAGESTRING, USERBLOB, USERCODE, 
         CREATEDATE, CREATETIME, OBJECTLEVEL, CATEGORY, 
         USERKEY1, USERKEY2, VERSIONKEY, STATUSCODE, 
         SEVERITY, EXTENSION, PROJECTKEY, BLOBEXISTS, ROOTFSID, 
         FLOWREQUESTID, FILELOCATION, RUNID,
         REPLACE(CONVERT(NVARCHAR(10),CREATEDATE, 126),'-','') + CONVERT(NVARCHAR(50),CREATETIME) AS DateTimeObject,
         ROW_NUMBER() OVER(ORDER BY CREATEDATE DESC, CREATETIME DESC, MSGID DESC) AS TEMP_ROW_NUM 
     FROM 
         IFS_ACTLOG 
     WHERE 
         PROJECTKEY = 'Project1' AND ROOTFSID = 1) AS TEMP_MGXPI4_1

SQL 查询的服务器执行计划:

很可能,您的表现是基于移动大量数据。

但是,从性能的角度来看,您的查询是:

SELECT . . .,
   ROW_NUMBER() OVER (ORDER BY CREATEDATE DESC, CREATETIME DESC, MSGID DESC) AS TEMP_ROW_NUM 
 FROM  IFS_ACTLOG 
 WHERE PROJECTKEY = 'Project1' AND ROOTFSID = 1

此查询建议在 (PROJECTKEY, ROOTFSID, CREATEDATE DESC, CREATETIME DESC, MSGID) 上建立索引。

也就是说,即使查询运行得更快,移动到数据库之外的数据量仍然需要时间来处理。