我有一个连接性能问题已被证明比预期更难破解。
SELECT distinct
tx.[Counter],
tx.[time],
tx.[Count] PassengerProcessed,
tx.Wait,
tx.[Length] QueueLength,
tx.DW_SK_WaitingTime,
tx.QueueId,
bc.AIRLINE
FROM stg.TmpCheckInStep1 tx
LEFT JOIN DSO_WaitingTime.stg.TmpBagCounter bc ON tx.[Counter] = bc.COUNTER_ID
AND tx.[time] >= bc.ROLLED_ON_TM_UTC
AND tx.[time] < bc.ROLLED_OFF_TM_UTC
tx表约有2000万行,BC表约为100万行。 当前的运行时至少需要几个小时。
这两个表都是工作流程的一部分,每晚都会删除它们并重新创建。
BC在Counter_ID
上有一个非隐藏索引,其中包含Airlined
,ROLLED_ON_TM_UTC
,ROLLED_OFF_TM_UTC
。
TX目前在Counter上有一个非clusted索引,不包括Time。我试图在索引中包含Time,但无济于事。
目前的执行计划如下: ExecutionPlan
我猜测它的大于,而不是破坏表现的条件。 如何改进查询或索引以加快速度?
修改
感谢到目前为止的建议 - 我正在测试Dan Guzman建议的聚集索引。没有DISTINCT,执行时间就会大大减少。执行计划在索引搜索上变为100%:brentozar.com/pastetheplan/?id = rJ6i5YcMf