2009-11-01 13 views
9

は、これは二つの質問で構成されていますMySQLのdatetimeカラムよりもタイムスタンプはどれくらい早いですか?

  1. は、MySQLのタイムスタンプフィールドは、クエリ「による順」の日時フィールドよりも、本当に速いですか?

  2. 上記の質問に対する回答が「はい」の場合、どれくらい早くなる可能性がありますか? 100万行のテーブルで、MySQL内部のタイムスタンプフィールドに基づいて100〜200k行を頻繁にソートすると、外部プログラムでタイムスタンプを読み込み可能な文字列形式に変換することでソート時間の改善が相殺されますか?

答えて

9

最も簡単な方法は単体テストを書いて実際に数値を得ることです。

私の理論は、タイムスタンプが速いだろうということでしたが、このブログによると、私は間違っている:私は私の腸のように、最適化するために、場所を決定する前に、私は、プロファイリングによって、数字を取得する傾向がある理由 http://dbscience.blogspot.com/2008/08/can-timestamp-be-slower-than-datetime.html

これは、感情は時々かなり間違っている可能性があります。

これは、使用しているMySQLのバージョンによって異なる場合がありますが、datetimeの方が速いと思われます。

+1

ここに同じ話:http://www.dbtuna.com/article.asp?id=36 –

3

DATETIMEよりもTIMESTAMPを使用する主な利点は、行の作成時に現在の時刻に値を自動的に設定し、それを(または少しの努力で別の列に)設定できることです行更新時の現在の時間。これにより、自動的に作成および変更された日付が可能になります。

TIMESTAMP列のその他の制限(たとえば、特定の範囲外の日付を受け入れたり、サーバーのタイムゾーンが変更された場合など)がないため、DATETIMEは必要がない場合に適しています上の2つの機能のうちの1つです。

しかし、Unixのタイムスタンプをデータベースに格納するだけで、データベースを変換する必要がない場合は、おそらくそれを符号なし整数として直接格納し、わずかなパフォーマンスを達成できます。

+0

@ Jason:パラメータをNOW()と設定するとどう思いますか? –

+0

私は認識しています。違いは、TIMESTAMP値がINSERTまたはUPDATEに指定されずに設定されることです。個人的に私はDATETIMEを使用し、私のDB抽象化レイヤーは作成されたフィールドと変更されたフィールドを自動的に更新します。 – Jason

+0

@Jason、あなたのご意見ありがとうございます。私はこの場合のデータソートのパフォーマンスだけに注意し、タイムスタンプフィールドの範囲制限は問題ではありません。タイムスタンプ分野のもう1つの利点は、1億の行テーブルに対して381.5MBのディスク容量が必要であることです。 – jack

関連する問題