我有一个简单的查询,但我不了解“最高条款”的行为。
func slide(slider: inout Moveable) {
slider.move(to: CGPoint(x: 100, y: 100))
}
slider(slider: prius) // <--- Compile Error
// Cannot use mutating member on immutable value: 'slider' is a 'let' constant
slider(slider: prius as (inout Moveable) // <--- Compile Error
(*查询是执行计划中的一个简单版本,但完全相同)
SELECT Top (1) Timestmp
FROM DataTable
WHERE [LoadId] = 3104
AND [Temp1] > @Setpoint
AND [Temp2] > @Setpoint
AND [Temp3] > @Setpoint
AND [Temp4] > @Setpoint
AND [Temp5] > @Setpoint
ORDER BY Timestmp OPTION (RECOMPILE)
上有一个通用的非聚集索引(LoadId, Temp1, Temp2, Temp3, Temp4, Temp5)
上的单独的非聚集索引查询大约需要1分钟才能完成。但是,如果我写Top(100),则需要花费[ms]才能完成。
以下是查询的一些统计信息:
顶部(1):https://www.brentozar.com/pastetheplan/?id=B1zwx0klN
顶部(100):https://www.brentozar.com/pastetheplan/?id=Hkx5k0JgE
我怎样才能使Top(1)和Top(100)一样快,为什么这么慢?我以前从未在其他服务器上看到过这种行为,也许是在SQLServer设置上有问题吗?
答案 0 :(得分:0)
解决方案:
在SSMS执行计划窗口中签出绿色信息消息后,缺少包含选定列的INCLUDE的索引。
CREATE NONCLUSTERED INDEX [] ON [dbo].[FurnaceData] ([LoadIdLowInt],[LoadIdHighInt],[ControlTempZ1PV],[ControlTempZ2PV],[ControlTempZ3PV],[ControlTempZ4PV],[ControlTempZ5PV]) INCLUDE ([Timestmp])