0

5億レコードのMySQLテーブルがあると仮定します

tsインデックスが付けられ、値としてタイムスタンプを持つ列があります。効率的ですか

select * from table where ts>=time()-24hours

過去24時間/週/月/年だけでなく?

または、nosqlを使用しますか?

4

1 に答える 1

2

大きな日付範囲を処理する場合、MySQLはインデックスを破棄することがよくあります。技術的には範囲(「今」で終わる)であるあなたの"> = "は、開始点にジャンプできるはずなので、オプティマイザーの例外かもしれません...

テーブルを作成する時間がEXPLAINあれば、それがインデックスを使用しているかどうかを確認するために使用します。

うまくいけば、あなたはする必要はありませんSELECT *。結果に2、3の小さい列だけが必要な場合は、それらもインデックスに入れます。これにより、MySQLがディスクから基になるより広い行を読み取る必要がなくなります。

于 2012-09-18T20:00:51.030 に答える