1

MySQLデータベースには、ユーザーのログインまたはログアウトが検出されたときに設定される列をusers持つテーブルがあります。logged_in, BOOL

私たちのウェブサイトには「アプリケーションにログインしているユーザー」と表示されますがSELECT COUNT(*) FROM users WHERE logged_in = 1、パフォーマンス上の理由から単にそうすることには注意が必要です。

usersテーブルには数千行あると予想されますが、いつでもログインできるのはほんの一握り(たとえば、20)のユーザーだけです。

このクエリをMySQLで最適化できるようにする方法はありますか?おそらくKEYまたはVIEWが関係していますか?または、ユーザーと一緒に補助テーブルを作成して、logged_in_usersこれも更新する必要がありますか?

4

1 に答える 1

0
  1. インデックスがある場合は、logged_inログインしているユーザーの数がユーザーテーブル全体に非常に少ないため、非常に高速なクエリである必要があります(logged_in = 0はあまり効率的ではない可能性があります:))これはそれらの1つです可能な値が2つしかない列のインデックスが、値の1つに対して非常に効率的なクエリを実行できる場合。
  2. しないでください、count(*)してくださいcount(your_primary_key)。そうすれば、logged_inのインデックスを作成した場合、最適なパフォーマンスを得るためにクエリ全体がカバーされます。
于 2012-11-29T21:11:58.640 に答える