巨大なデータベースを構築する予定です。私は既に100M行以上のデータベースを持っていた前にクライアントを持っていました。だから、100M行のテーブルAを持っていて、250行のテーブルが複数あるとしましょう。1つの大きなテーブルと複数の小さなテーブルのMySQL JOINパフォーマンス
は、私は通常より高速であるアプローチを知りたい(私はそれが多くのものに依存していることを知っている):
- が
- は小さなテーブルを含めるIDに基づいて大規模なものに小さなテーブルを結合たとえば、大きなテーブル内の値
:
第一オプション:
id | data1 | data2 | data3 | table1_foreign_key | table2_foreign_key | table3_foreign_key
--------------------------------------------------------------------------------------------------------------
1 | test | test | test | 12 | 34 | 22
2 | test | test | test | 34 | 67 | 63
3 | test | test | test | 43 | 34 | 18
4 | test | test | test | 23 | 21 | 22
5 | test | test | test | 22 | 34 | 22
6 | test | test | test | 22 | 34 | 13
7 | test | test | test | 23 | 54 | 12
8 | test | test | test | 11 | 57 | 43
9 | test | test | test | 3 | 34 | 22
ここでは、すべての小さなテーブルをIDに基づく大きなテーブルに参加させます。たとえば、都市、国、デバイスなどをここに格納します。
第二オプション:この第二のオプションで
id | data1 | data2 | data3 | table1_foreign_key | table2_foreign_key | table3_foreign_key
--------------------------------------------------------------------------------------------------------------
1 | test | test | test | Oklahoma | sample_text | sample_text
2 | test | test | test | New York | sample_text | sample_text
3 | test | test | test | New York | sample_text | sample_text
4 | test | test | test | New York | sample_text | sample_text
5 | test | test | test | Washington | sample_text | sample_text
6 | test | test | test | Mitchigan | sample_text | sample_text
7 | test | test | test | Oklahoma | sample_text | sample_text
8 | test | test | test | Kansas | sample_text | sample_text
9 | test | test | test | Dallas | sample_text | sample_text
なJOINが、データがメイン大きなテーブルにここに含まれることになる何もないでしょう。列あたりの予想データサイズは2〜20文字のようになります。
質問:
速く、我々は同じ環境を持ち、適切なインデックスを持っていることを考えることができ、上記のオプションの?どのアプローチがここにアドバイスされていますか? (私の顧客はこのデータベースの&テーブルのクリックとデータを保存したい)
できるだけ早くオプション2から叫び声を出して逃げてください。第2の選択肢であなたが持っているものは、適切に正規化されていません。あなたは、時期尚早の最適化と呼ばれるものに着手しようとしています。これは、まだ存在しないパフォーマンス問題に対処するための非標準的な設計を行うこととして定義されています。それは純粋な悪です。 –
小さなテーブルの構造は何ですか?オプション2が機能するためには、各テーブルは1列のデータしか持たないようです。 – yanman1234
@SeanLangeこの便利な返信をありがとう。したがって、パフォーマンスを報告した後でも、2番目のオプションを検討する価値はまだありません。 –