フィールドに5〜10の異なる値がある場合に、列挙型を使用するとパフォーマンスが向上しますか?もし何が有利なのであれば?MySQL Enumパフォーマンスの優位性?
答えて
ような操作のためENUM
を使用することに大きな性能ペナルティあり:ドロップダウンメニューを取り込むために、例えば、ENUM
における許容値の
クエリーリスト。
INFORMATION_SCHEMA
からデータ型をクエリし、返されたBLOBフィールドからリストを解析する必要があります。許容値のセットを変更します。
ALTER TABLE
ステートメントが必要です。このステートメントは、テーブルをロックし、再構成を行う可能性があります。
私はMySQLのENUM
のファンではありません。私は参照テーブルを使用することを好む。 「How to handle enumerations without enum fields in a database?」
ENUMは、値の数に応じて内部的に1または2バイトで表されます。格納している文字列が2バイトより大きく、めったに変更されない場合は、ENUMを使用します。列挙型で比較が高速になり、ディスク上のスペースが少なくなり、シーク時間が短縮されます。
値の追加/削除に関しては、列挙型の柔軟性が低いという欠点があります。
あなたが参照しているMySQLのバージョンがわかりません。しかし、5.0以降では、列挙型のサイズは、マニュアルに従って可能な値の数に応じて1または2バイトです:http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.htmlわずか5〜10の値があり、サイズは1バイトでなければなりません。 – Lacek
@Lacekあなたは正しいです!回答を16ビットから1または2バイトに変更します –
この記事では、http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/フェルナンドは、クエリの列挙型のパフォーマンスを調べています。
ENUMの値が時々変更されている場合、ENUMを使用してデザインの観点から少しエレガントに見えるかもしれませんが、大きなデータセットではパフォーマンスが向上します。 詳細については、彼の記事を参照してください。同意しますか?
- 1. MPI_Bcast:効率の優位性?
- 2. t4テンプレートの優位性
- 3. MySQLの優先順位順
- 4. Java Enumのパフォーマンス?
- 5. プロセスの優先順位とスレッドの優先順位
- 6. シェフの料理本の属性の優先順位
- 7. MySQL Query Enum
- 8. コンパイラでの演算の優先順位と結合性
- 9. Rails 2.3.5/MySQLキーの優先順位の問題。力指数
- 10. 対称鍵暗号化の速度優位性
- 11. 演算子の優先順位と結合性
- 12. MVC Razorの優位性.cshtmlを超える.aspxを取得
- 13. Mysqlの検索、優先順位による注文
- 14. mysqlプロセス間の優先順位を設定する
- 15. 優先順位キューマルチスレッド
- 16. ANTLRルールの優先順位
- 17. C#エクステンションメソッドの優先順位
- 18. JOINの優先順位は?
- 19. Rails3ルーティングの優先順位
- 20. express.jsのルータ優先順位
- 21. MVCルーティングパラメータの優先順位
- 22. JPAカスケードタイプの優先順位?
- 23. EnumでのRegularExpression属性
- 24. MySQLの優先度
- 25. enum - > intはenum - > unsignedよりも優れた変換をします。
- 26. アクセプト付きブーストスレッドのパフォーマンス/優先度
- 27. MySQLサーバーのパフォーマンス
- 28. mysqlクエリのパフォーマンス
- 29. mysqlのパフォーマンス
- 30. Mysql - インデックスのパフォーマンス
私の列挙値は人口統計(W、B、A、H、O、U)、性別(M、F、U)および党(R、 D、I、U)は決して変わらないだろう。彼らはいつも私のアプリケーションロジックにハードコードすることができます。そのため、ドロップダウン値をクエリして構造を変更することはそれほど大きな要因ではありません。 – gsueagle2008
"私の列挙値は決して変更されません"。そのステートメントが間違っていることが何回証明されたかについてのいくつかの統計を得るためには**愛**でしょうか。 – benmarks
記載されている箇条書きの点は真ですが、特にその列で注文している場合、ENUMはJOINSよりも高速です。設定値が変更されないgenderのような列の場合は、ENUMを使用することをお勧めします。しかし、値を追加または削除する必要がある可能性がある場合は、JOINを使用するか、CHAR/VARCHAR/TINYINTを使用してアプリケーションレベルで管理してください。もう1つのこと... MySQLは列内の実際の値をインデックス(INT)だけに保存しないので、フルテキスト文字列を使用してユーザーに表示することができます。コーディング。;-) – Jabari