2MM 行と 8 列を超えるユーザー統計を格納する MySQL テーブルと、userID のインデックスがあります。ユーザーが自分のプロファイルにアクセスすると、これらの情報の多くがデータベースから取得され、最悪の場合、数十のSELECT
クエリが他のテーブルと結合されることがあります。これは、多くのデータを取得する必要がある SO のプロファイルに似ています。
ユーザー スコアを取得するような一部のクエリでは、COUNT
MySQL 関数やその他のパフォーマンスを消費する関数が必要です。そのため、プロファイル ページのクエリだけでも、最大 10 ~ 20 秒かかることがあります。
今私の質問:
- SO のような Web サイトは、どのようにしてこれほど多くの情報をすばやく取得できるのでしょうか?
- キャッシュ層は必要ですか?
- MySQL のパフォーマンスを消費するスコアなどのカウントを事前に計算する必要がありますか?
- 書き込み用に最適化されたテーブルと読み取り用に最適化されたテーブルを 1 つずつ使用する必要がありますか? もしそうなら、どうすればSOのようなライブデータを取得できますか?
- MySQL から離れるべきですか?