私のデータセットは、ハードドライブのID、空き領域の割合、タイムスタンプの3行のテーブルです。表には、20分ごとに各HDD(そのうち1200台)の新しい状態が追加されます。
HDDプールの最後の状態を選択する場合は、MAX(タイムスタンプ)を選択し、最も古い状態を選択する場合は、MIN(タイムスタンプ)を選択します。
しかし、特定のタイムスタンプがあるとすると、このタイムスタンプの前後X秒からデータを取得するようにMySQLに要求するにはどうすればよいですか?
私のデータセットは、ハードドライブのID、空き領域の割合、タイムスタンプの3行のテーブルです。表には、20分ごとに各HDD(そのうち1200台)の新しい状態が追加されます。
HDDプールの最後の状態を選択する場合は、MAX(タイムスタンプ)を選択し、最も古い状態を選択する場合は、MIN(タイムスタンプ)を選択します。
しかし、特定のタイムスタンプがあるとすると、このタイムスタンプの前後X秒からデータを取得するようにMySQLに要求するにはどうすればよいですか?
WHERE yourTimeStamp
between TIMESTAMPADD(SECOND,-3,yourtimestamp)
and TIMESTAMPADD(SECOND, 3,yourtimestamp)
ここで、Xの代わりに-3と+3が使用されました
詳細については、 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampaddを参照してください。
このような:
WHERE timestamp BETWEEN DATE_SUB('<given_timestamp>', INTERVAL 5 SECOND)
AND DATE_ADD('<given_timestamp>', INTERVAL 5 SECOND);
他の回答で述べたように、選択がフィールドに基づいている場合、クエリは遅くなりtimestamp
ます。
INDEX
その列にを追加して、速度を上げることができます。
ALTER TABLE <table_name> ADD INDEX(`timestamp`)
テーブルのサイズによっては、最初にインデックスを追加するときに時間がかかることに注意してください。次に、INSERT
クエリの速度が低下し、データベースのサイズが大きくなります。これは人によって異なりますので、テストして調べる必要があります。