2017-01-28 20 views
1

私のアプリは100,000人以上のユーザーを持っています。mysqlは各アーティストのカウント欄を作成したり、クエリでカウントを取得します(フォロワー数をカウントする)

私は2つのテーブルがあります:artist_id, user_id

  • アーティストid(PK), name, ... , (followers) --> need???
  • (両方ともPKを)

私は芸術家のそれぞれについて、フォロワーの数を取得する必要があります。

これはより論理的で正確ですか? (メモリとCPU

A:

select id, name, followers 
from artist 
limit 30 

B:

SELECT c.*, COUNT(b.artist_id) AS `followers` 
FROM (SELECT a.id, a.name 
    FROM artists a 
    INNER JOIN following b ON a.id = b.artist_id AND b.user_id = ?) AS c 
LEFT JOIN following b ON c.id = b.artist_id 
GROUP BY c.id 
ORDER BY `followers` DESC 
limit 30 

おかげ。

+1

2つのクエリは異なる処理を行います。 1つはあなたが望むことをします。それはあなたが使うべきものです。 –

+0

@ GordonLinoffとConcur、 –

+0

@ KaranShah私の質問が編集されました。私がアーティストテーブル用の列を作成し、その中にカウントフォロワーを挿入すれば、より良いでしょうか?余分な列を作成する必要はありません。 (直接クエリを使用してカウントを取得する) – frzdno

答えて

1

メソッドAでデータを取得する方が速くなりますが、実際のカウントが反映されない可能性があるため、データが古くなっている可能性があります。 (メソッドAのカウントを定期的に更新する必要があります)

メソッドBでは、それは遅くなりますが、リアルタイムカウントになります。カウントをリアルタイムで表示することが重要でない場合は、メソッドAを使用して定期的にフォロワー数を更新することをお勧めします。

+0

はリアルタイムでは重要ではありませんが、メソッドBで使用すると、count col 'followers = followers + 1'をカウントする必要はありません。私はメソッドBが遅く、サーバーリソースの消費量が多いことを知りたいですか? – frzdno

+0

@frzdnoそれはあなたが尋ねた質問ではないので、私たちはそれに答えることができません – Strawberry

+0

方法Aを使用すると、フォロワー+1をする必要はありません。フォロワーをアップデートするためにcronjobまたはMySQLイベントを実行するだけですアーティストのテーブルに。はい、BはCPUとメモリをもっと消費するので遅くなります。 –

関連する問題