web-dev-qa-db-ja.com

MySQL Enumのパフォーマンス上の利点?

フィールドに可能な値が5〜10しかない状況で列挙型を使用することには、パフォーマンス上の利点がありますか?そうでない場合、利点は何ですか?

50
gsueagle2008

次のような操作でENUMを使用すると、パフォーマンスが大幅に向上します。ペナルティ

  • ENUMの許可された値のリストをクエリします。たとえば、ドロップダウンメニューに入力します。 INFORMATION_SCHEMAからデータ型をクエリし、返されたBLOBフィールドからリストを解析する必要があります。

  • 許可された値のセットを変更します。 ALTER TABLEステートメントが必要です。これにより、テーブルがロックされ、再構築が行われる場合があります。

私はMySQLのENUMのファンではありません。私はルックアップテーブルを使用することを好みます。 「 データベース内の列挙型フィールドなしで列挙型を処理する方法は? 」に対する私の回答も参照してください。

45
Bill Karwin

ENUMは、値の数に応じて、内部的に1バイトまたは2バイトで表されます。保存する文字列が2バイトより大きく、ほとんど変更されない場合は、ENUMが適しています。 enumを使用すると比較が高速になり、ディスク上のスペースが少なくて済むため、シーク時間が短縮される可能性があります。

欠点は、値の追加/削除に関して、列挙型の柔軟性が低くなることです。

24
John Douthat

この記事では http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/ フェルナンドはクエリの列挙型のパフォーマンスを調べます。

その結果、設計の観点からはENUMの使用は少しエレガントに見えないかもしれませんが(ENUM値が時々変更されている場合)、パフォーマンスの向上は大規模なデータセットで明らかです。詳細については、彼の記事を参照してください。同意しますか?

11

いいえ、比較を参照 ここ

利点はコードの可読性にあります。

1
Paul Grigoruta