@Smita V、あなたが参照する非効率的なクエリは、すべてのテーブル行に変換関数を間違って適用しているためです。ここでは、条件自体にそれを適用する必要があります。だからではなく、テーブルの上にすべての行を変換し
select col1,col2,colUnixdatetime from table where From_Unixtime(colUnixdatetime) between wtvdate1 and wtvdate2
、のあなたが持っている日付にそれを比較します。
select col1,col2,colUnixdatetime from table where colUnixdatetime between UNIX_TIMESTAMP(wtvdate1) and UNIX_TIMESTAMP(wtvdate2).
このようにすると、適切なテーブルインデックスが使用されます。
@treznik私はuts整数からdatetime型またはtimestamp型にデータ型を移動しました。これは、上記の理由から、読み込みと操作がはるかに簡単です(私は直接のテーブルアクセス)。しかし、私は最近、二つの理由から、このアプローチを再考し始めました:
- あなたはあなた位置に基づいて、タイムゾーンを推測しているように、タイムゾーンの場所は、保存されていないがあります。これはあなたにとって問題かもしれません。
- 夏時間が無視されます。時計が午前2時に戻ると、午前1時30分に2回、2011年10月30日01:30にはこれを知らせません。一方、1319938200はこれを知らせます。私は文字列(2011-10-30 01:30 BST)を除いて、タイムゾーンを含む日付を格納するネイティブの方法がmysqlにあるとは思わない。
私はまだこれに対する答えを見つけようとしています。
私は訂正しました。 :) – treznik
私は同意しない。私の答えをチェックしてください。 – coderama
MySQLのDATETIMEフィールドにはタイムゾーンがありません。常に日付をUTCに保存してください(つまりNOW()を使わないでください - UTC_TIMESTAMP()を使用してください)そうしないと、アプリケーションを国際化しようとすると、あなたのサーバーのタイムゾーン。 – jmc