2011-03-09 8 views
2

私は元々100個のカラムを含んでいた '大きな' MySQLテーブルを持っていて、5個のテーブルに分割してバックアップしましたCodeIgniterアクティブレコード...MySQL - 100個のカラムを持つ1つの大きなテーブルまたは5個のテーブルに分割してJOIN

パフォーマンスの観点からは、元のテーブルを100列に保つか、分割したままにする方がよいでしょう。

各テーブルには約200行があります。

答えて

2

200 rows?それは何もない。

新しいものが問題のために意味のある方法で列を結合した場合、私はテーブルを分割します。私はnormalizationの目でそれをするだろう。

"良さ"に関する何らかの基準を満たしているか、現在のパフォーマンスが受け入れられないため、あなたはそれらを分割しているように聞こえます。あなたのスキーマによって引き起こされるパフォーマンスの問題を示唆するデータがありますか?そうでない場合は、このアプローチを再考することをおすすめします。

パフォーマンスにどのような影響があるかは誰にも分かりません。クエリを実行すると、より多くのJOINが遅くなる可能性がありますが、ユースケースが何であるかはわかりません。

+0

http://forums.digitalpoint.com/showthread.php?t=50337 – Ghetto

0

重要なことは - あなたは(そしてその良いスタイルです!)一時的なデータを含む列を別のテーブルに移動することができます。オプションの列を別のテーブルに移動することができます(これはロジックに依存します)。

データベースを作成する場合、最も重要なことは、各テーブルがいくつかの本質を埋める必要があることです。より多くのテーブルを作成するほうがいいですが、異なるエッセンスを別のテーブルに分けてください。除外は、ソフトウェアを最適化する必要がある場合です。なぜなら、「ストレート」論理ソリューションはゆっくりと機能するからです。

非常に複雑なモデルを扱う場合、単純な関係で単純なブロックに分割する必要があります。これはデータベース設計と同様に機能します。

パフォーマンスに関しては、もちろん、すべてのデータにアクセスするためのジョインとキーを必要としないため、1つのテーブルでパフォーマンスが向上するはずです。関係が少ない - 遅れが少ない。

+0

これは正規化さえしていないので、100個の奇数列の単一のテーブルを避けるだけです...パフォーマンスはそうではないようです〜200行しかないので、どんな方法でも遅れています... 速度/最適化/ベストプラクティスPOVは、単一のテーブルに保存するか、すべてを分割するのが最善でしょうか? http://stackoverflow.com/questions/3913911/how-many-columns-in-mysql-table – Ghetto

+0

返信ありがとうございます...テーブルの99%のフィールドにはデータ(VARCHAR)が含まれています。 200行それは小さいですが、私はスピード/ベストプラクティスの観点から疑問に思っています:1列100列または5列20列...私はちょうど量を維持するための結合でオーバーヘッドを追加していると思うテーブルの列数が低い... – Ghetto

+0

Atari 800で実行している場合を除き、速度は200行の問題ではありません。テーブル全体がメモリに収まり、パフォーマンスの違いを測定することは困難です。 –

1

あなたはすでに変更を加えていますが、今はスキーマのバージョンがより速くなっているかどうかを確認していますか?

(回答が分割テーブルの場合は、何か間違っている)

統合されたテーブルは高速であるだけでなく、必要なコードも少なくて済み、バグが発生しにくいはずです。

データの構造に関する情報は提供していません。

データベース内の200行で、パフォーマンスを気にする必要があります。

+0

はい、私は変更を加えました。一部の人々がテーブル間の1対1の関係を持つ30列の分割を言うと、他のテーブルが1テーブルをより速く維持すると言うように、決定的な答えを見つけるのは難しい...私は、フィールドの99%が満杯です。 200は今だがテスト中で成長するだろう...私は200がどちらかの方法で高速になることを知っているが、最高のデザインPOVから最良の方法は何か?ありがとう – Ghetto

0

あなたが言う概念は、垂直パーティショニングと呼ばれ、パフォーマンスに驚くほどの影響を与える可能性があります。 Mysql.com Performance Postで、彼らは特にこれについて議論します。記事からの抜粋:手動垂直 パーティショニングを行う必要がありますが

、あなたは特定の 状況で実践から に利益をもたらすことができます。たとえば、 というと、通常は を参照する必要はなく、以前に示した テーブルの に定義されているVARCHAR列を使用します。

関連する問題