5億レコードのMySQLテーブルがあると仮定します
ts
インデックスが付けられ、値としてタイムスタンプを持つ列があります。効率的ですか
select * from table where ts>=time()-24hours
過去24時間/週/月/年だけでなく?
または、nosqlを使用しますか?
5億レコードのMySQLテーブルがあると仮定します
ts
インデックスが付けられ、値としてタイムスタンプを持つ列があります。効率的ですか
select * from table where ts>=time()-24hours
過去24時間/週/月/年だけでなく?
または、nosqlを使用しますか?
大きな日付範囲を処理する場合、MySQLはインデックスを破棄することがよくあります。技術的には範囲(「今」で終わる)であるあなたの"> = "は、開始点にジャンプできるはずなので、オプティマイザーの例外かもしれません...
テーブルを作成する時間がEXPLAIN
あれば、それがインデックスを使用しているかどうかを確認するために使用します。
うまくいけば、あなたはする必要はありませんSELECT *
。結果に2、3の小さい列だけが必要な場合は、それらもインデックスに入れます。これにより、MySQLがディスクから基になるより広い行を読み取る必要がなくなります。