使用SQL查询,但未完成

使用SQL查询,但未完成,sql,sql-server,Sql,Sql Server,我遇到的情况是,我正在运行一个如下所示的查询 select column1 from ABC except select column1 from XYZ 它已经运行了数小时,但仍然没有完成。问题是什么 ABC表有16000条记录,XYZ有5000000条记录 以下是实际查询: SELECT WFA1.ACTIVITYNM + '/' + WFA2.ACTIVITYNM AS "ACTIVITY_NAME" FROM WFAACTIVITY WFA1, WFAACTIVITY WFA2 W

我遇到的情况是,我正在运行一个如下所示的查询

select column1 from ABC
except
select column1 from XYZ
它已经运行了数小时,但仍然没有完成。问题是什么

ABC表有16000条记录,XYZ有5000000条记录

以下是实际查询:

SELECT WFA1.ACTIVITYNM + '/' + WFA2.ACTIVITYNM AS "ACTIVITY_NAME"
 FROM  WFAACTIVITY WFA1, WFAACTIVITY WFA2
 WHERE WFA1.ACTIVITYNM IN (SELECT DISTINCT UPPER(WORKORDER)
  FROM TEMP_ACTIVITY_DETAILED_INBOUND
 WHERE WORKORDER IS NOT NULL
   AND PROCESS_FLAG = 'PROCESS' 
   AND STATUS = 'O'
  AND JOB_TYPE='Direct'
   ) 
   AND WFA1.WFAACTIVITYID = WFA2.PARENTID
   AND WFA1.ACTIVITYNM <> WFA2.ACTIVITYNM

EXCEPT

SELECT (UPPER(WORKORDER) + '/' + UPPER(OPERATION_NUMBER)) AS "ACTIVITY_NAME"             
  FROM TEMP_ACTIVITY_DETAILED_INBOUND
 WHERE PROCESS_FLAG = 'PROCESS'
   AND STATUS = 'O'  
  AND JOB_TYPE='Direct'

您可以使用exists对查询进行词组化:

要使其成功运行,您需要在XYZcolumn1上建立索引。实际上,索引可能有助于原始查询

查询速度较慢的其他原因:

服务器很忙。 正在使用的表上存在锁,这些锁会阻止或严重降低读取访问速度。 这些表实际上是相当复杂的视图。
这是一个非常普遍的问题。。。你的统计数字是多少?您有什么索引?表结构、数据类型等…最有可能的是争用问题锁定或阻塞。硬件问题不太可能,但并非不可能。什么是“解释计划”?可能,您在第1列上没有索引,并且优化器选择了“嵌套循环外部”:因此,对于来自ABC的每个值,它都会对XYZ进行完全扫描,这将导致总共80 bln个操作。如果XYZ不能完全缓存在RAM中,那就太可怕了。您的操作取决于您使用的DBMS-您可以利用“hash join semi”(如果有的话),或者至少在XYZcolumn1上创建一个索引。有一个索引可用。我也添加了查询…我也添加了查询\\我也添加了查询,并且它在临时活动\u详细\u入站上有索引
select column1
from ABC a
where not exists (select 1 from XYZ x where a.column1 = x.column1);