フィールドに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. パフォーマンスの優位性 - 複数のPowerShellsとバックグラウンドジョブ
- 2. Sequelize:パフォーマンスの優位性、または利便性のためだけに?
- 3. アンドロイドのMVPの優位性
- 4. t4テンプレートの優位性
- 5. パターンマッチング:スイッチケースの優位性?
- 6. MPI_Bcast:効率の優位性?
- 7. RxJava2の優位性AsyncTask
- 8. DocuSign iOS SDKの優位性
- 9. MySQLの優先順位順
- 10. Java Enumのパフォーマンス?
- 11. Enum SingletonとClassの下位互換性
- 12. mysqlの優先順位付けケース
- 13. MySQLでの日単位のパフォーマンス比較
- 14. CSS優先順位
- 15. プロセスの優先順位とスレッドの優先順位
- 16. C言語の優先順位の優先順位
- 17. シェフの料理本の属性の優先順位
- 18. MySQL Query Enum
- 19. パンダの優位性への取り組み
- 20. コンパイラでの演算の優先順位と結合性
- 21. AWS弾性のロードバランサ - インスタンスの優先順位
- 22. Rails 2.3.5/MySQLキーの優先順位の問題。力指数
- 23. 演算子の優先順位と結合性
- 24. 対称鍵暗号化の速度優位性
- 25. シェフ属性の優先順位が機能しない
- 26. MVC Razorの優位性.cshtmlを超える.aspxを取得
- 27. mysqlプロセス間の優先順位を設定する
- 28. Mysqlの検索、優先順位による注文
- 29. 優先順位キューマルチスレッド
- 30. MySQL SELECT/LIKEをリポジトリに優先順位付けする
私の列挙値は人口統計(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