我有以下查询需要花费超过1个小时才能运行。
SELECT
RES.NUM_PROCESS,
RES.ID_SYSTEM
FROM
RESTRICTED_PRECESS RES -- 16'000 records
WHERE
RES.ID_SYSTEM <> 'CYFV'
AND RES.NUM_PROCESS NOT IN (SELECT PR.NUM_PROCESS
FROM PRECESS PR -- 8.000.000 records
WHERE PR.ID_SYSTEM = RES.ID_SYSTEM)
表的索引已经可以了。
CREATE NONCLUSTERED INDEX [IX1_PROCESS] ON [dbo].[PRECESS]
(
ID_SYSTEM ASC
)
INCLUDE(NUM_PROCESS)
这是执行计划
有什么方法可以使此SELECT
返回记录更快?
谢谢。
答案 0 :(得分:2)
我将继续为您推荐这两个表的有用索引:
CREATE INDEX idx1 ON RESTRICTED_PRECESS (ID_SYSTEM, NUM_PROCESS);
CREATE INDEX idx2 ON PRECESS (ID_SYSTEM, NUM_PROCESS);
外部表RESTRICTED_PRECESS
上的索引应加快WHERE
子句的速度,并且它也完全覆盖SELECT
子句。子查询中的表PRECESS
上的索引也应该加快索引速度。