首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个SQL查询需要8个小时才能完成?

为什么这个SQL查询需要8个小时才能完成?
EN

Stack Overflow用户
提问于 2011-09-27 15:18:06
回答 3查看 2.7K关注 0票数 0

下面是一条简单的SQL JOIN语句:

代码语言:javascript
复制
SELECT     
    REC.[BarCode]
   ,REC.[PASSEDPROCESS]
   ,REC.[PASSEDNODE]
   ,REC.[ENABLE]
   ,REC.[ScanTime]
   ,REC.[ID]
   ,REC.[Se_Scanner]
   ,REC.[UserCode]
   ,REC.[aufnr]
   ,REC.[dispatcher]
   ,REC.[matnr]
   ,REC.[unitcount]
   ,REC.[maktx]
   ,REC.[color]
   ,REC.[machinecode]
   ,P.PR_NAME
   ,N.NO_NAME
   ,I.[inventoryID]
   ,I.[status]
   FROM  tbBCScanRec as REC  
       left join TB_R_INVENTORY_BARCODE as R 
         ON    REC.[BarCode] = R.[barcode] 
           AND REC.[PASSEDPROCESS] = R.[process]
           AND REC.[PASSEDNODE] = R.[node]
       left join TB_INVENTORY  as I 
         ON R.[inventid] = I.[id]
       INNER JOIN  TB_NODE as N 
         ON N.NO_ID  =  REC.PASSEDNODE
       INNER JOIN  TB_PROCESS  as P 
         ON P.PR_CODE    = REC.PASSEDPROCESS

tbBCScanRec具有556553条记录,而表TB_R_INVENTORY_BARCODE具有260513条记录,表TB_INVENTORY具有7688条记录。但是,最后两个表(TB_NODETB_PROCESS)的记录都少于30条。

令人难以置信的是,当它在SQL Server2005中运行时,返回结果集需要8小时。

为什么要花这么多时间来执行?

如果删除两个inner join,则只需10秒即可完成运行。

出什么事了?

至少有两个UNIQUE NONCLUSTERED INDEXE。

一个是表TB_R_INVENTORY_BARCODE上的IX_INVENTORY_BARCODE_PROCESS_NODE,它包含四个列(inventidbarcodeprocessnode)。

另一个是表tbBCScanRec上的IX_BARCODE_PROCESS_NODE,它包含三个列(BarCodePASSEDPROCESSPASSEDNODE)。

EN

回答 3

Stack Overflow用户

发布于 2011-09-27 15:27:16

好吧,这样的问题的标准答案是:

REC.PASSEDPROCESS

  • Make
  1. 确保您已准备好所有必要的索引,即N.NO_IDREC.PASSEDNODEP.PR_CODEREC.PASSEDPROCESS
  2. Make上的索引确保您联接的列的类型相同,这样就不需要进行隐式转换。
票数 2
EN

Stack Overflow用户

发布于 2011-09-27 15:27:38

您正在处理大约(556553 *30 *30) 5亿行。您可能需要在表中添加indexes

如果您使用的是SQL server,则可以观察计划查询,以了解您在哪里浪费时间。请参阅此处的文档:http://msdn.microsoft.com/en-us/library/ms190623(v=sql.90).aspx

查询计划将帮助您创建索引。

票数 1
EN

Stack Overflow用户

发布于 2018-05-02 09:36:27

当您检查索引时,也应该有聚集索引-非聚集索引使用聚集索引,所以没有聚集索引将使非聚集索引变得无用。过时的统计数据也可能是一个问题。

但是,为什么需要获取所有数据呢?这样做的目的是什么?您应该使用WHERE子句将结果集限制为您需要的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7565484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档