私はそうのような「last_seen」と呼ばれるテーブルのカラムのタイムスタンプを持っている:MySQLで現在のタイムスタンプの10分以内にあるすべてのレコードを選択する方法は?
2012-01-25 18:46:42
2012-01-23 08:19:04
2012-01-23 08:19:04
etc...
は、どのように私は(最も効率的な方法で)タイムスタンプが現在のタイムスタンプの10分以内にあるすべてのレコードを取得することができますか?
私はそうのような「last_seen」と呼ばれるテーブルのカラムのタイムスタンプを持っている:MySQLで現在のタイムスタンプの10分以内にあるすべてのレコードを選択する方法は?
2012-01-25 18:46:42
2012-01-23 08:19:04
2012-01-23 08:19:04
etc...
は、どのように私は(最も効率的な方法で)タイムスタンプが現在のタイムスタンプの10分以内にあるすべてのレコードを取得することができますか?
最も効率的な方法は、あなたのタイムスタンプ(およびその上の関数を使用せずにタイムスタンプのみ)を、すべての行に対して定数として計算できる式と比較することです。このようにして、mysqlはタイムスタンプ列。
SELECT * FROM myTable
WHERE last_seen >= NOW() - INTERVAL 10 MINUTE
あなたは常にインデックスは、テーブル内のすべての行をチェックする必要なしに、あなたのWHERE条件を満たした行を見つけるために使用することができるかどうかを確認するためにEXPLAIN SELECT ...
を試すことができます。
あなたの質問は現在のタイムスタンプの10分以内のレコードを要求しますが、私は過去(ない未来)でせいぜい10分を意味しないためにそれを取る:これは10分を追加し
SELECT col1, col2, col3
FROM table
WHERE DATE_ADD(last_seen, INTERVAL 10 MINUTE) >= NOW();
last_seen
と比較し、現在の時刻と比較します。値が大きい場合、
last_seen
は10分未満です。
使用方法についてはdocumentation on DATE_ADD()
を参照してください。
これは「最も効率的な」方法として失敗します。 – piotrm