70列を超える可能性があるテーブルを設定しています。テーブルにアクセスするたびに列のデータの一部が必要になるわけではないので、分割することを考えています。次に、これを行うと、結合を使用する必要があります。
どの時点で、列が多すぎると考えられますか?
70列を超える可能性があるテーブルを設定しています。テーブルにアクセスするたびに列のデータの一部が必要になるわけではないので、分割することを考えています。次に、これを行うと、結合を使用する必要があります。
どの時点で、列が多すぎると考えられますか?
回答:
データベースでサポートされている上限を超えると、多すぎると見なされます。
すべてのクエリですべての列を返す必要がないという事実は、まったく正常です。そのため、SELECTステートメントでは、必要な列に明示的に名前を付けることができます。
原則として、テーブル構造はドメインモデルを反映する必要があります。同じエンティティに属している70(100、何を持っている)属性がある場合でも、それらを複数のテーブルに分割する理由はありません。
select count(*) from votes毎回計算されると思いますか、それとも非正規化されていると思いますか?それはSOデータベースを悪くし、ジェフ・アトウッドをクレイジーにしますか?
テーブルをいくつかの列に分割することにはいくつかの利点があります。これは垂直分割とも呼ばれます。ここにいくつかあります:
多くの行を持つテーブルがある場合、MySQLはテーブル内のすべてのインデックスを再構築する必要があるため、インデックスの変更には非常に長い時間がかかる可能性があります。インデックスを複数のテーブルに分割すると、処理が速くなる場合があります。
クエリと列のタイプによっては、MySQLが一時テーブル(より複雑な選択クエリで使用される)をディスクに書き込んでいる可能性があります。ディスクI / Oは大きなボトルネックになる可能性があるため、これは悪いことです。これは、クエリにバイナリデータ(テキストまたはBLOB)がある場合に発生します。
時期尚早に最適化しないでください。ただし、場合によっては、より狭いテーブルから改善を得ることができます。
正規化のルールに違反している場合は多すぎます。データベースを正規化している場合、多くの列を取得するのはかなり困難です。データベースを設計して、問題をモデル化します。特定のdbプラットフォーム用に最適化するための人為的なルールやアイデアは避けてください。
幅の広いテーブルに次のルールを適用すると、1つのテーブルの列がはるかに少なくなる可能性があります。
ここにあなたを助けるためのリンクがあります。
It is pretty hard to get that many columns if you are normalizing your database.見た目ほど難しくはありません。