在一個字段只有5-10個不同的可能值的情況下使用enum是否有性能優勢?如果不是什麼優勢?MySQL枚舉性能優勢?
回答
有一個巨大的性能處罰使用ENUM
用於諸如操作:在ENUM
允許值的
查詢列表,例如填充一個下拉菜單。您必須從
INFORMATION_SCHEMA
查詢數據類型,並將列表解析出返回的BLOB字段。更改允許值的集合。它需要一個
ALTER TABLE
語句,該語句鎖定表並可以進行重構。
我不是MySQL的ENUM
的粉絲。我更喜歡使用查找表。另見我對「How to handle enumerations without enum fields in a database?」的回答
沒有,看到一個比較here
優勢奠定了在代碼的可讀性。
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 2016-03-23 12:14:46
@Lacek你是對的!我會將答案從16位更改爲1或2字節 – 2016-03-23 14:48:35
在這篇文章中http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/費爾南多調查查詢Enum類型的性能。
結果是,從設計的角度來看,雖然使用ENUM可能看起來不太優雅(如果您的ENUM值有時會發生變化),但對於大型數據集,性能增益顯而易見。 查看他的文章瞭解詳情。你同意嗎?
- 1. 優勢採用枚舉
- 2. 帶枚舉的MySQL枚舉
- 3. Linq complex - 枚舉性能
- 4. 性能枚舉vs類?
- 5. Java枚舉的性能?
- 6. Android性能Kotlin枚舉類
- 7. 優先枚舉名
- 8. 以PLINQ的優勢與自定義可枚舉擴展
- 9. 具有屬性和性能的枚舉
- 10. 在枚舉語句中枚舉mysql枚舉
- 11. MySQLi優於MySQL的優勢
- 12. 選擇枚舉值枚舉屬性
- 13. 優化雙迴路枚舉
- 14. Java中的枚舉。優點?
- 15. 不能枚舉
- 16. 不能轉換UserQuery枚舉枚舉
- 17. NHibernate的MySQL枚舉
- 18. Mysql Select枚舉值
- 19. MySQL插入(枚舉?)
- 20. MySQL枚舉空值
- 21. MySQL性能調優
- 22. Mysql性能調優
- 23. 性能優勢java.util.Date compareTo vs before/after?
- 24. Silverlight是否比JavaScript有性能優勢?
- 25. 選擇標籤的性能優勢?
- 26. 單罐vs多罐 - 性能優勢
- 27. 性能優勢。第2輪:VARBINARY vs VARCHAR
- 28. MySQL查詢性能的兩難境地:枚舉VS表
- 29. 在MySQL中使用字符串枚舉 - 性能問題
- 30. Html屬性枚舉
根據你鏈接的文章,只要你不改變可能的狀態,使用ENUM就會有性能優勢。 – 2009-12-02 16:57:36