2011-01-11 12 views
1
  1. 私は大きなテーブルを持ち、200,000行があり、列挙型の列を変更/追加する必要があります。正しく動作するか問題が発生しますか?私はenumsを避けるべきですか?例は髪の色です:私は黒と茶色を持っているが、200000行後に私は金髪を追加することを決めた。 (これらは、多くの条件があり、メンバーを検索するフィールドです)mysqlテーブルの計画に関するご質問はありません

  2. 電子メールフィールドはvarchar(255)にする必要がありますか?

  3. IDは常に符号なしbigintにする必要がありますか?

私は基本的に何かを最適化しようとしています。

EDIT:300,000人以下のユーザーがいると予想していますが、他のテーブルのユーザーIDと関連IDのmediumint対intまたはbigintのパフォーマンスが著しく向上するのではないでしょうか?

答えて

2
  1. 列挙は(200K行のような)小さなテーブルに髪の色、及び頻繁な更新のような選択肢の限られたセットの悪い考えない痛くない

  2. メールアドレスの最大長さであります320文字。からsource

  3. 符号なしあなたはAUTO_INCREMENTをしたい場合は、[はい、符号なしがビッグint型を移動するための方法ですか?あなたのテーブルが1未満の数百万人であるならば、あなたはそれ

+0

ポイント2のアドオンとして、電子メールアドレスは常にASCIIであるため、そのフィールドに異なる文字セットを選択することができます。 –

+0

@Victor Nicollet-ああ、マルチリンゴドメイン名のために、それは動作するのですか? – ajreal

+0

私は30万人を超えるユーザーがいないと予想していますが、mediumintとintまたはbigintのどちらが顕著なパフォーマンス向上をもたらすのだろうかと思います。 – BugBusterX

0
  1. 200,000本当に大きくないよりもはるかに低く設定することができます。小さいテーブルでALTER TABLEを実行することに問題はないはずです。符号なしのbigintは、あなたの主キーのためにあなたはかなり大きな数字を許可します - 私は通常、私はあなたが主キーを意味推測

  2. を使用しているものだ

  3. 。明らかに、より大きなデータ型を使用すると、より多くのディスク領域が必要になりますが、実際にはそれほど目立つことはありません。 MySQLの5.1 +で

0

ENUMタイプを更新するために、ALTER TABLEを(ご確認下さい)単にテーブル定義IFFを変更します - 古い列挙値の順序が変更されない、新しいものが追加されます最後に。だから、何百万行もあるにしても、余分な時間はかかりません。

を使用すると、列

Color ENUM('Red', 'White'); 

を持っていて、このようにブルーを追加した場合 - -

ALTER TABLE <tableName> MODIFY Colour ENUM('Red', 'White', 'Blue'); 

あなたが行ってもいいです手の込んだ

しかし、今は古い列挙リテラルのインデックス値を変更したとして、それは、テーブル内の各行を更新することになります

..ENUM('Blue', 'Red', 'White'); 

このようにあなたがそれを変更した場合(インデックス値は何のMySQLあり、注意してください行に格納されます)。

関連する問題