フィールドに可能な値が5〜10しかない状況で列挙型を使用することには、パフォーマンス上の利点がありますか?そうでない場合、利点は何ですか?
次のような操作でENUM
を使用すると、パフォーマンスが大幅に向上します。ペナルティ。
ENUM
の許可された値のリストをクエリします。たとえば、ドロップダウンメニューに入力します。 INFORMATION_SCHEMA
からデータ型をクエリし、返されたBLOBフィールドからリストを解析する必要があります。
許可された値のセットを変更します。 ALTER TABLE
ステートメントが必要です。これにより、テーブルがロックされ、再構築が行われる場合があります。
私はMySQLのENUM
のファンではありません。私はルックアップテーブルを使用することを好みます。 「 データベース内の列挙型フィールドなしで列挙型を処理する方法は? 」に対する私の回答も参照してください。
ENUMは、値の数に応じて、内部的に1バイトまたは2バイトで表されます。保存する文字列が2バイトより大きく、ほとんど変更されない場合は、ENUMが適しています。 enumを使用すると比較が高速になり、ディスク上のスペースが少なくて済むため、シーク時間が短縮される可能性があります。
欠点は、値の追加/削除に関して、列挙型の柔軟性が低くなることです。
この記事では http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/ フェルナンドはクエリの列挙型のパフォーマンスを調べます。
その結果、設計の観点からはENUMの使用は少しエレガントに見えないかもしれませんが(ENUM値が時々変更されている場合)、パフォーマンスの向上は大規模なデータセットで明らかです。詳細については、彼の記事を参照してください。同意しますか?
いいえ、比較を参照 ここ
利点はコードの可読性にあります。