0
MySQLのレコードテーブルを使用すると、 'some_timestamp'のインデックスが存在します。計算されたwhere句のあるMySQLクエリのパフォーマンス
WHERE句は、異なる時間バケットのレコードを数えられるように計算を使用しています。
実行に時間がかかります。
より良い、高速なアプローチはありますか?この場合
set @now = now();
(SELECT
"45 Days" as "interval", count(*) as "thecount"
FROM blah.yada
where TIMESTAMPDIFF(day,some_timestamp,@now) <= 45
)
UNION
(SELECT
"90 Days" as "interval", count(*) as "thecount"
FROM blah.yada
where TIMESTAMPDIFF(day,some_timestamp,@now) > 45 and TIMESTAMPDIFF(day,event_timestamp,@now) <=90
)
UNION
(SELECT
"the rest" as "interval", count(*) as "thecount"
FROM blah.yada
where TIMESTAMPDIFF(day,some_timestamp,@now) > 90
)
これは明らかでした。私はよく知っているはずです!ありがとう!!! – Fred
CASEを使用していただきありがとうございます。しかし、このように再構成すると、クエリの完了には1.0秒かかります。醜いUNIONアプローチは、同じ結果を生み出すのにわずか0.3秒しかかかりません。 – Fred
@Fred hmm、奇妙だが、奇妙なことにあまりにも驚くべきことではない。多くの行があると言っていたので、おそらく数百万の文字列でグループ化を実行する必要がありました。あなたが文字列である間隔に "結婚"していないのではなく、代わりにintであれば、はるかに優れているかもしれません。 – Uueerdo