[解決済み] どちらがより効率的か。複数のMySQLテーブルと1つの大きなテーブルのどちらが効率的か?
質問
私は、MySQL データベースにさまざまなユーザーの詳細を保存しています。元々は、データが UserIds とリンクされ、必要に応じてデータを表示および操作するために、時には複雑な呼び出しを介して出力されることを意味するさまざまなテーブルで設定されていました。新しいシステムをセットアップする場合、これらのテーブルをすべて、関連するコンテンツの 1 つの大きなテーブルにまとめることは、ほとんど理にかなっています。
- これは助けになるのでしょうか、それとも妨げになるのでしょうか。
- 呼び出し、更新、または検索/操作における速度の考慮事項?
これは私のテーブル構造の例です。
- users - UserId, username, email, 暗号化されたパスワード, 登録日, ip
- user_details - クッキーデータ、名前、住所、連絡先、所属、デモグラフィック・データ
- user_activity - 貢献、最後のオンライン、最後の閲覧
- user_settings - プロファイルの表示設定
- user_interests - 広告のターゲットとなる変数
- user_levels - アクセス権限
- user_stats - ヒット数、タリー数
編集してください。 これまでの回答はすべてupvoteしました。どれも本質的に私の質問に答えてくれる要素を持っています。
ほとんどのテーブルは1:1の関係を持っており、それが非正規化の主な理由でした。
テーブルが 100 以上の列にまたがる場合、これらのセルの大部分が空のままになる可能性がありますが、問題はないでしょうか?
どのように解決するのですか?
複数のテーブルを使用すると、次のようなケースに対応できます。
(a) 異なる人々が異なるテーブルを含むアプリケーションを開発する場合、それらを分割することは理にかなっています。
(b) データ収集の異なる部分について、異なる種類の権限を異なる人に与えたい場合、それらを分割する方が便利かもしれません。(もちろん、ビューの定義やそれに対する権限の付与を適切に検討することは可能です)。
(c) 特に開発中にデータを異なる場所に移動するために、より小さなファイルサイズをもたらすテーブルを使用することは理にかなっているかもしれません。
(d) 小さなフットプリントは、単一のエンティティの特定のデータ収集に関するアプリケーションを開発する際に、快適さを与えるかもしれません。
(e) 単一値のデータだと思っていたものが、将来的には複数の値になる可能性があります。しかし、明日になれば、その値を (date from, date to, credit value) のように変更することになるかもしれない。このような場合、テーブルを分割しておくと便利です。
私は、データを適切に分割した複数のテーブルに一票を投じたいと思います。
がんばってください。
関連
-
MySQLデータベース・インデックスの左端一致の原則
-
MySQLインストールチュートリアル(Windows用)詳細
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み] MySQL で特定のカラム名を持つすべてのテーブルを見つけるにはどうすればよいですか?
-
[解決済み] MySQLです。大きなVARCHARとTEXTの比較?
-
[解決済み】MySQLのテーブル、インデックス、データを複製する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLとOracleの一括挿入SQLの汎用的な記述例
-
MySQL演算子(and, or, in, not)の具体的な使用方法
-
sql エラーを解決する オペランドには1つの列が含まれている必要があります。
-
msql クエリでのエラー 'where 節' の不明な列 'yellow fruit'
-
Unknown character set.を解決する。MySQLデータベースインポート時の'utf8mb4'エラーの解消
-
CMakeエラー。ソースディレクトリ "/xxx/mysql-5.6.21" に CMakeLists.txt がないようです。
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] なぜ SQLAlchemy の count() は生のクエリよりずっと遅いのでしょうか?
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?