2017-01-25 9 views
0

私は毎秒更新されているデータベーステーブルを持っています。 最新の20,000件のレコード(毎秒収集されているので約6時間分)を取得するクエリを作成したいと思います。SQL SELECTを使用して、最近追加されたエントリを取得しますか?

私は試してみると思った:

SELECT time_stamp, column2, column3 
FROM myDB.table1 
limit 20000; 

しかし、上記のクエリは、データがテーブルに挿入されたときの非常に最初からアイテムを取得します。私は最新の20000のレコードが欲しいです。

テーブルに挿入された最新のレコードをプルするクエリはどのようになりますか?

答えて

2

正しいクエリは次のとおりです。

SELECT time_stamp, column2, column3 
FROM myDB.table1 
ORDER BY time_stamp DESC 
LIMIT 20000; 

ただし、クエリが高価であることを見つけるかもしれません。あなたはtime_stampにインデックスを持っている場合は、これは、より効率的かもしれません:

SELECT time_stamp, column2, column3 
FROM myDB.table1 
WHERE time_stamp >= date_sub(now(), interval 6 hours); 

それは正確に20,000レコードではありませんが、最近の記録であり、それはすべてのデータをソートするよりも高速である必要があります。

次の操作を行うことにより、このようなインデックスを作成することができます。

create index idx_table1_timestamp on table1(time_stamp); 
+0

感謝を!私はそれを与えるだろう。クエリの所要時間がわかり、 'time_stamp'インデックスを参照する必要がある場合は、それを試してみます。私はこれを繰り返しクエリとして設定しようとしていますので、毎日どのように日付を調整するのかはよく分かりません。 – Gary

+0

私のラズベリーパイをMySQLクライアントとして使用すると、これらのクエリの実行に少し時間がかかるようです。この返却記録をより速くする他の方法はありますか? – Gary

+1

'time_stamp'にインデックスがありますか? –

関連する問題