0
以下の表を考えてみましょう。MySQLでの日単位のパフォーマンス比較
表:
ID
epoch_time_in_millis
counter
クエリ#1:
SELECT
DATE_FORMAT(FROM_UNIXTIME(epoch_time_in_millis/1000),"%Y-%m-%d") date,
SUM(counter) totalCount
FROM my_table
GROUP BY date
クエリ#2:
SELECT
(epoch_time_in_millis DIV 86400000) * 86400000 ms,
SUM(counter) totalCount
FROM my_table
GROUP BY (epoch_time_in_millis DIV 86400000) * 86400000;
私の質問は: 上記の2つのクエリはパフォーマンスの違いを示しますか?
「はい」の場合は、その理由をお知らせください。 いいえわからない場合は、理由を理解させてください。 :p
ありがとうございます。
答えをありがとう。テーブルに何百万もの行があるとしましょう。それでも上記の2つのクエリはパフォーマンスに違いはありませんか? 2番目のクエリには乗算と除算が含まれているので、2つのクエリが実際には長期的に異なると推測しました。あなたはそれを明らかにするでしょうか? @GordonLinoff –
@AnonymousOne。 。 。一般に、3次ストレージ内のレコードをフェッチおよび管理するためのオーバーヘッドは、1つのクエリにつき少数の算術演算よりもはるかに大きくなります。間違いなく(例えば、ユーザ定義関数や非常に長い文字列の関数に対して)これが当てはまらないケースがありますが、この性質の何かは一般に過最適化です。 –
私はこれらの2つのクエリを同じデータセット(〜100K行)で別々に実行しました。クエリ#2は、10000回の連続した実行で常にクエリ#1を上回ります。クエリ#1が実行する実行時間は、クエリ#2が実行する時間よりも常に2.5倍以上長くなります。 –