1
のためにソートされるように、DBは次のようになります。MySQLの行は、私はDB内のイベントを保つMySQLサーバを持っているパフォーマンス
ウェブUIでid | epoch_time | type | event_text | ....
---|------------|------|-------------|-----
01 | 1487671205 | 0 | user-login | ....
02 | 1487671284 | 0 | user-logout | ....
03 | 1487671356 | 1 | sys_error | ....
04 | 1487671379 | 0 | user-logout | ....
05 | 1487671389 | 2 | user_error | ....
06 | 1487671397 | 1 | sys_error | ....
、過去24時間のイベントの夏によるありDBは1年前のデータログを保持しているため、現時点では1Mのレコードがあり、サイトのロードが非常に遅くなっています(明らかな理由から)。 SQLクエリは簡単です
、
SELECT COUNT(id) as total FROM `eventLog` WHERE `epoch_time` >= (UNIX_TIMESTAMP() - 86400)
私の質問は - それは持っている生のヒット一度ようepoch_time列がソートされていることにMySQLを「伝える」ための方法があります:
は、epoch_time < (UNIX_TIMESTAMP() - 86400)
クエリは終了します。
- (ページをロードするために12秒」〜7)[UPDATE]はあなたの助けありがとうございまし
おかげ
は、私は、インデックスを追加しようとしましたが、性能はまだ悪いです
統計情報だけを保存するのは理にかなっていますか?
を代わりに数えIDの..あなたは$ Q-> NUM_ROWSを試すことができます()。 count(id)は別の関数を実行してクエリの負荷を増加させるためです。 – Vinay
epoch_timeにインデックスを追加すると、役立つかもしれません。クエリをキャッシュすることもできます。私はあなたが1Mの結果をすべて最新のものに見せてくれるとは思わない?これはクエリキャッシュの優れた仕事です。 – mroman