この(簡単にするために変更された)クエリは、より大きなクエリの一部であり、日付に他の選択と結合されます。しかし、私はこのセクションを犬のように遅くするように固定しました。ユーザーの各ログインをログに記録するUserLoginHistoryテーブルがあるとします。ユーザーごとに、最初にログインした日付が必要です(クエリの後半で、LogDateでグループ化して、1日に最初にログインした回数を取得します)。
select
LogDate, --(this value is only date, no time)
UserId
from
UserLoginHistory ul
where
not exists
(
select
*
from
UserLoginHistory ulPrevious
where
ulPrevious.LogDate < ul.LogDate
and ul.UserId = ulPrevious.UserId
)
group by ul.LogDate, ul.UserId
明らかにNOTEXISTS-部分は遅いものです。しかし、同じ仕事をするより効率的なものに置き換える方法がわかりません。
UserLogHistoryカウントが少ない場合、パフォーマンスは問題ありません。それは私が約15000に達するとき、それは遅くなり始めます。たぶん私は毎日の結果を別のテーブルにバッチ処理する必要がありますが、そこに1つあるはずなので、このクエリのより良い解決策を見つけたいと思います...
御時間ありがとうございます!