新しいテーブルを作成していますが、正しく作成したいと考えています。テーブルは、プロフェッショナルタイプとデシルが関連付けられたメンバーのリストになります。
プロフェッショナルタイプは3文字の文字列です。このフィールドに使用できる文字列は8つだけです。 ENUMまたはCHAR(3)またはそれより良いものを使用する必要がありますか?
十分位数は1〜10の任意の数にすることができますが、これらの数のみです。 ENUMまたは署名されていないTINYINTなどを使用する必要がありますか?
効率化のための最良のオプションはどれですか?
ENUMは、タイプ値の追加/削除に関する問題のために私を怖がらせます。 ProfessionalType
とDecile
の両方をTINYINT
またはCHAR(3)
として表す方がよいでしょう。 ENUM以外。
ENUM
に関する私の過去の投稿をご覧ください。
Ocy 19, 2011
: ENUMと整数型を使用する場合の利点と欠点?Jan 24, 2012
: ENUM()リストを変更することは可能ですか?効率を上げるために、カーディナリティが非常に低いことを考慮して、このフィールドのみを索引付けしないでください(8、10)。
以前のすべての回答とリンクされた質問にもう1つ追加します。たまたま、ブールを表す小さな列があった。しかし、ある日、true
値を2つの別々の値に分割する必要がありました。拡張0,1
から0,1,2
は取るに足らないものでしたが、string-enumに変更すると、より多くの労力が必要になります。また、3つの値のtinyint-enumをtinyint-booleanに戻すことも同様に簡単です。
タイプが10個以下であることが確実な場合は、ENUM
を使用してください。それ以外の場合は、TINYINT
を使用して、これらの値を受け入れ可能な名前/説明にマッピングする小さなテーブルを指す可能性があります。
CHAR(3)
の使用は避けてください。長くなり、混乱しやすくなります(大文字と小文字を区別しますか?区別しないとインデックスが悪くなります)。