私は本当に趣味の人です。願望があまりにも大きすぎると言われました。データベースの変更がクライアントのリファクタリングを必要とせず、高速で済むようにデータベースを作成する正しい方法を見つけ出そうとしています。私が典型的な開発やDBAの用語をよく理解していないかのように答えてください。MySQLデータベースデザイン特有のケース、列または追加のテーブル?
状況:各ユーザーが評価した書籍の数を確認しようとしていました。
-Overall rating (ratings table)
-sub rating (ratings table)
-tag (book_tags table)
-list (book_lists table)
*Related tables: users, tags, lists
問題:私は10件のサブ評価し、すべての評価表に2つの全体的な評価を持って、列の各(推測私はそれが次の任意の二つを持っている場合、定格本を考えますこれは悪いですが、わかりません)。代わりに、レーティングテーブル(12行)とbook_ratingsテーブル(レーティングテーブルの各行がユーザーのレーティングタイプ)を持っているべきですか?
-e.g. book_ratings: id | user_id | book_id | rating_id
はいた場合、そのbook_ratingsテーブル上の500K書籍、ブックあたり12格付けの種類、10,000人のユーザーと50億行の合計が存在する場合、何が起こりますか?それは超低速で走るつもりですか?もう一つ考慮すべき点は、将来的にはより多くのサブ評価タイプを追加したいということですが、それは部分的に変更する価値があると思われる理由ですが、それは大変な作業です。
ありがとうございます!
私は最適化に関するいくつかの情報を教えていただけますか?何か適切な基礎ですか?先日、私は様々なクエリで使用するすべてのフィールドにインデックスを追加するまでは本当に減速していましたが、それでも暗闇の中をさまよう盲人のように行われました。理想的には、長期的には、うまくいけばデータベースの一部として200,000人のユーザーと100万の書籍を持っていたいと思う(Pipe dream、but hey :)。可能であれば、事前に計画を立てる方法を知りたい。 –
これを最適化することは、少し黒い芸術です。私はMySQLに精通していませんが、SQL Serverではクエリの「実行計画」を表示できます。つまり、クエリを実行するためにサーバーが行っていることの詳細です.SQL Serverの場合は、最適化に非常に役立ちますどのインデックスを追加すべきかを直接指示することさえできます。私はMySQLに似たものがあると思います。 – MiMo