次のクエリがあります。
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 分間さかのぼって提供する」ことです。
このクエリの最適化に関するヒントはありますか?
ありがとう!
インデックス: どこでも句の列 (ReceivedTime、OSType、Notify)。
実行計画については、とても大きなことで、私にはあまりなじみがありません。ここに貼り付けるべきですか?:)