MySQLのDATETIME列を使用して日付と時刻を保存します。日付はUTCです。ある日からアイテムを選びたいです。私が今していること:
SELECT * FROM data WHERE DATE(CONVERT_TZ(datetime, 'UTC', 'Australia/Sydney')) = '2012-06-01'
タイムゾーンはユーザーによって異なることに注意してください
問題は、テーブルの成長が非常に遅いことです。それをより速くする方法はありますか?
MySQLのDATETIME列を使用して日付と時刻を保存します。日付はUTCです。ある日からアイテムを選びたいです。私が今していること:
SELECT * FROM data WHERE DATE(CONVERT_TZ(datetime, 'UTC', 'Australia/Sydney')) = '2012-06-01'
タイムゾーンはユーザーによって異なることに注意してください
問題は、テーブルの成長が非常に遅いことです。それをより速くする方法はありますか?
現在、クエリはデータベースのすべての行の変換を計算する必要があります。逆に変換することで、変換が1回だけ(または範囲を形成する必要があるため実際には2回)行われるようにすることで、状況を改善できる可能性があります。次に、適切なインデックスをdatetime
付けると、処理がかなり速くなります。
SELECT * FROM data
WHERE datetime BETWEEN CONVERT_TZ('2012-06-01 00:00:00', 'Australia/Sydney', 'UTC')
AND CONVERT_TZ('2012-06-01 23:59:59', 'Australia/Sydney', 'UTC')
または、うるう秒がどのクエリとも一致しないことを心配している場合は23:60:00
、次のことができます。
SELECT * FROM data
WHERE datetime >= CONVERT_TZ('2012-06-01', 'Australia/Sydney', 'UTC')
AND datetime < CONVERT_TZ('2012-06-01' + INTERVAL 1 DAY, 'Australia/Sydney', 'UTC')
後者の形式では、PHP側で時間を追加する必要はありませんが、代わりに文字列パラメーターとして日付を渡すことができます。