web-dev-qa-db-ja.com

ENUM、TINYINT、CHARのどのデータタイプを使用する必要がありますか?

新しいテーブルを作成していますが、正しく作成したいと考えています。テーブルは、プロフェッショナルタイプとデシルが関連付けられたメンバーのリストになります。

プロフェッショナルタイプは3文字の文字列です。このフィールドに使用できる文字列は8つだけです。 ENUMまたはCHAR(3)またはそれより良いものを使用する必要がありますか?

十分位数は1〜10の任意の数にすることができますが、これらの数のみです。 ENUMまたは署名されていないTINYINTなどを使用する必要がありますか?

効率化のための最良のオプションはどれですか?

4
NorthMikeDBA

ENUMは、タイプ値の追加/削除に関する問題のために私を怖がらせます。 ProfessionalTypeDecileの両方をTINYINTまたはCHAR(3)として表す方がよいでしょう。 ENUM以外。

ENUMに関する私の過去の投稿をご覧ください。

効率を上げるために、カーディナリティが非常に低いことを考慮して、このフィールドのみを索引付けしないでください(8、10)。

3
RolandoMySQLDBA

以前のすべての回答とリンクされた質問にもう1つ追加します。たまたま、ブールを表す小さな列があった。しかし、ある日、true値を2つの別々の値に分割する必要がありました。拡張0,1から0,1,2は取るに足らないものでしたが、string-enumに変更すると、より多くの労力が必要になります。また、3つの値のtinyint-enumをtinyint-booleanに戻すことも同様に簡単です。

3
Vojtěch

タイプが10個以下であることが確実な場合は、ENUMを使用してください。それ以外の場合は、TINYINTを使用して、これらの値を受け入れ可能な名前/説明にマッピングする小さなテーブルを指す可能性があります。

CHAR(3)の使用は避けてください。長くなり、混乱しやすくなります(大文字と小文字を区別しますか?区別しないとインデックスが悪くなります)。

2
Shlomi Noach