我有以下查询:
SELECT
tl.*, d.*
FROM
TrackerLocations AS tl
inner join Trackers t on tl.TrackerId = t.TrackerId
inner join Devices d on t.UserId = d.UserId
WHERE
tl.ReceivedTime = (SELECT MAX(tl2.ReceivedTime) FROM TrackerLocations tl2 WHERE tl2.TrackerId = tl.TrackerId)
and tl.ReceivedTime >= DATEADD (MINUTE,-2,GETUTCDATE())
and d.OSType <> 3
and d.Notify = 1
并且出乎意料的是,它不能在可接受的时间内返回结果。第一次在生产环境中运行时,执行时间约为3秒,现在已运行到超时(在C#应用程序内,30秒)。 主要目的是:“给我任何跟踪器的最新位置和有关用户设备的信息,并向后查看2分钟”。 有没有优化此查询的任何提示?
谢谢!
索引: 除了where子句列(ReceivedTime、OSType、Notify)以外的任何地方。
关于执行计划,这是一个很大的东西,对我来说并不太熟悉。我应该在这里粘贴它吗? :)