sql-server - 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
退货记录更快?
谢谢你。
解决方案
我将继续为这两个表建议可能有用的索引:
CREATE INDEX idx1 ON RESTRICTED_PRECESS (ID_SYSTEM, NUM_PROCESS);
CREATE INDEX idx2 ON PRECESS (ID_SYSTEM, NUM_PROCESS);
外部表上的索引RESTRICTED_PRECESS
应该加速WHERE
子句,它也完全覆盖了SELECT
子句。子查询中表的索引PRECESS
也应该加快速度。
推荐阅读
- reactive-programming - Spring Webflux - 如何在不使用 block() 操作的情况下从 Flux 中获取价值
- ag-grid - Ag-Grid 服务器端行组密钥创建者
- html - 有没有办法在 Elm 中遍历 XML 树?
- python - Python - 使用 UTC 时间戳检查它是否是另一个时区的 DST
- excel - 如何从剪切/删除/粘贴已在同一工作表中剪切/删除/粘贴的行中停止 Find if Then 功能
- java - 从另一个类对象访问一个类的对象
- javascript - 如何将rails数据放入javascrip数组
- asp.net - asp.net基础生命周期中render方法的实际意义是什么?
- node.js - Mongo $OR - 不返回完全匹配
- java - 使用java 8嵌套父子列表