2016-09-29 8 views
0

私はオンラインテーブルから大きなデータレコードを持っています。 (4000万人以上のレコード)大きなレコードテーブルからオンラインユーザーを取得

は今、私はテーブルから任意の時間にオンラインユーザーを表示したいが、これは、サーバーに障害が発生してきたから実行する...私は要求を送信例えば

は先週にオンラインで入手、それは(テーブルが非常に大きなレコードを持っているため)仕事ではありません。

これは私の例のPHPコードです:そう

$d = $_GET['date']; 
$time = time() - 60*60 * 24 * $d; 
$phql = "SELECT DISTINCT aid FROM onlines WHERE time > '$time'"; 

、あなたは任意のより良いヒントがありますか?

Tnx。

+0

時間インデックスが設定されていますか? – RiggsFolly

+0

___Itsは動作しません__どのように動作しません。エラーメッセージが表示されますか?私たちと共有したいのですか**ただ楽しみのために** – RiggsFolly

+0

'$ time'を ''。$ time ''に置き換えてみてください。 'また、SQLインジェクションを防ぐためにパラメータをバインドします。 – Bonzo

答えて

0

EXPLAIN SELECT ...を使用して、テーブルに定義されているインデックスを確認します。特に大きな表の場合は、問合せする列に索引が付いていることを確認してください。この場合time

次の方法でインデックスを作成することができます。これは、クエリをスピードアップする必要があり

CREATE INDEX time_index ON onlines (time); 

。潜在的なデータの消失や持続性について気にしない場合は、インメモリテーブルを使用してIOを回避する方法があります。クエリの速度が大幅に向上しますが、サーバーが再起動したり、MySQLがシャットダウンしたりすると、テーブルが空になります。

関連する問題