2016-05-16 5 views
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

ありがとうございます。

答えて

0

パフォーマンスを確認する最も良い方法は、データを使用してハードウェア上で行うことです。

しかし、MySQLはファイルソートアルゴリズムを使用してgroup byを実装しています。このアルゴリズムは一般的にインデックスを利用しません。特にあなたの場合はそうではありません。したがって、2つのクエリの作業は集計を処理することになります。

他の操作は簡単です。したがって、エンジンが1回か2回計算を実行するかどうかは、少数の行がない限り、全体の計算には関係ありません。そして、その場合、パフォーマンスは実際問題ではありません。

+0

答えをありがとう。テーブルに何百万もの行があるとしましょう。それでも上記の2つのクエリはパフォーマンスに違いはありませんか? 2番目のクエリには乗算と除算が含まれているので、2つのクエリが実際には長期的に異なると推測しました。あなたはそれを明らかにするでしょうか? @GordonLinoff –

+0

@AnonymousOne。 。 。一般に、3次ストレージ内のレコードをフェッチおよび管理するためのオーバーヘッドは、1つのクエリにつき少数の算術演算よりもはるかに大きくなります。間違いなく(例えば、ユーザ定義関数や非常に長い文字列の関数に対して)これが当てはまらないケースがありますが、この性質の何かは一般に過最適化です。 –

+0

私はこれらの2つのクエリを同じデータセット(〜100K行)で別々に実行しました。クエリ#2は、10000回の連続した実行で常にクエリ#1を上回ります。クエリ#1が実行する実行時間は、クエリ#2が実行する時間よりも常に2.5倍以上長くなります。 –

関連する問題