首页 > 解决方案 > SQL Server 2016 中的慢查询

问题描述

我有以下查询需要超过 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退货记录更快?

谢谢你。

标签: sql-server

解决方案


我将继续为这两个表建议可能有用的索引:

CREATE INDEX idx1 ON RESTRICTED_PRECESS (ID_SYSTEM, NUM_PROCESS);
CREATE INDEX idx2 ON PRECESS (ID_SYSTEM, NUM_PROCESS);

外部表上的索引RESTRICTED_PRECESS应该加速WHERE子句,它也完全覆盖了SELECT子句。子查询中表的索引PRECESS也应该加快速度。


推荐阅读