sql-server - 如何在 SQL Server 中使这个 TOP Query 快速?
问题描述
这是我的查询:
SELECT top 1 w.WONumber, * FROM TSP_TSR_Job t left join
wsm_WorkOrderSchedule w on w.tsrjobid = t.JobId WHERE t.JobID=325809
我试过的:
DECLARE @i INT
SET @i=1
SELECT TOP (@i) ObjectType='Job',w.WONumber,*
FROM TSP_TSR_Job t
left HASH join wsm_WorkOrderSchedule w
on w.tsrjobid = t.JobId
WHERE t.JobID=325809
执行计划:
问题是两个查询都需要 0:0:1 秒。
wsm_WorkOrderSchedule 中的 2493073 行和 TSP_TSR_Job
brentozar.com/pastetheplan/?id=ByXUickKQ 执行计划中的 524444
> SQL Server parse and compile time: CPU time = 0 ms, elapsed time =
> 0 ms.
>
> SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms.
> Warning: The join order has been enforced because a local join hint is
> used. SQL Server parse and compile time: CPU time = 5 ms, elapsed
> time = 5 ms.
>
> (1 row(s) affected) Table 'Workfile'. Scan count 0, logical reads 0,
> physical reads 0, read-ahead reads 0, lob logical reads 0, lob
> physical reads 0, lob read-ahead reads 0. Table 'Worktable'. Scan
> count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob
> logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table
> 'wsm_WorkOrderSchedule'. Scan count 1, logical reads 6, physical reads
> 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob
> read-ahead reads 0. Table 'TSP_TSR_Job'. Scan count 0, logical reads
> 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob
> physical reads 0, lob read-ahead reads 0.
>
> (1 row(s) affected)
>
> SQL Server Execution Times: CPU time = 16 ms, elapsed time = 11
> ms. SQL Server parse and compile time: CPU time = 0 ms, elapsed
> time = 1 ms.
>
> SQL Server Execution Times: CPU time = 1 ms, elapsed time = 1 ms.
解决方案
首先,创建一个索引来去除聚集索引扫描:
CREATE NONCLUSTERED INDEX IX_wsm_WorkOrderSchedule_tsrjobid
ON wsm_WorkOrderSchedule (tsrjobid)
INCLUDE (WONumber);
此外,更改您的TSP_TSR_JobId
索引以包含列。查看键查找运算符以找出需要哪些列
推荐阅读
- r - R:回归输出每次运行都会报告不同的结果
- javascript - 如何正确地将外部脚本添加到 Gatsby.js 项目中的 ReactJS 组件?
- python - 删除重复值并附加行值的其余部分
- php - Wordpress 错误日期错误
- php - 为什么更新会在数据库中产生这个结果` {"email":"try@gmail.com"}`
- reactjs - Formik TypeError:无法读取未定义的属性“submitForm”
- server - io.netty.channel.connecttimeoutexception 连接超时
- angular -
不附加 到 cdk-overlay-container - c++ - LLVM KaleidoscopeJIT:如何查看错误?
- kubernetes - 尝试将加密的 AWS EFS 与 EKS 中的 efs-csi-node 连接时出现挂载错误