2

ユーザーのリストとそのコメントを30秒ごとに自動更新するWebページがあります。

サイトには一度に最大300〜400人のユーザーがいる可能性があります。

したがって、30秒ごとに、これを実行するAJAを介してPHPスクリプトが呼び出されます。

SELECT `user` .*, by_user.name as updated_by 
                "FROM `user`
                "LEFT JOIN `user` by_user ON ( `user`.last_updated_by = by_user.user_id ) 
                WHERE `user`.active= 1 AND `user`.group_id =.$group_id.
                AND `user`.last_updated > (NOW() - INTERVAL 30 SECOND)

その日付計算(NOWおよびINTERVAL)を使用せず、代わりに最後のポーリングの日時を記録して、それと照合する方がよいでしょうか?

4

2 に答える 2

4

NOW() - INTERVAL 30 SECONDクエリに対して 1 回だけ実行され、非常に高速です。他の何かを行うためのオーバーヘッドは、ほぼ確実にパフォーマンスに悪影響を及ぼします。

複合インデックス (active、group_id、last_updated) がある場合、パフォーマンスが最適化されます。

選択で u.* を実行するため、クエリのカバリング インデックスを作成しようとはしません。

于 2012-11-08T21:38:06.950 に答える
0

どちらの方法でも同じ結果が得られます。計算は非常に高速で、クエリの実行中に 1 回だけ行われます。クエリの速度は、インデックスを作成したフィールドなどに大きく依存します。

于 2012-11-08T21:39:36.780 に答える