用回扑克牌的例子。扑克游戏老少皆宜,依附的规矩是梅花和黑桃为黑色,方块和红心为红色(例如,尤克牌)。如不雅我们须要为花色接洽关系额外的信息,例如色彩,那将若何?如不雅我们应用关系表,那我们只须要在关系表中新增字段即可,小事一桩。如不雅我们应用ENUM去表示花色,那我们就很难去精确的表示花色于色彩的接洽关系了,如斯我们只能在应用层上去杀青这种接洽关系。
3. ENUM值的数量大年夜于2个并少于20个
如不雅你的ENUM值只有两个,你完全可以将ENUM换成加倍高效的TINYINT(1)或者更更高效的BIT(1)(MySQL5.0.3及以上)。例如: gender ENUM('male', 'female') 可以变换为: is_male BIT(1). 当你只有两个选项时,完全能以布尔值 true/false,结合字段名字中的“is”关键词来区分。至于20个的上限设定,没错,ENUM事实上可以保存多达65535个值,但求你切切别试。跨越二十个值会变得很包袱,跨越50个必定难于治理与应用。
如不雅你无论若何都要用ENUM:
1. ENUM值切切不要应用数值型
ENUM定义为字符型数据是有原因的。并不是说你应用数值型字段类型去存储数字是缺点的,但有充分的证据显示,MySQL内部机制应用数字去引用索引(参考 膳绫擎的第七条)。反正不要在ENUM中存储数字,OK?
2. 推敲使悠揭捉?格模式
大年夜开辟、保护的角度去做有意义的事,机能问题出现时再推敲优化——广泛而言,应用关系表抑或是应用ENUM类型,争议赓续。
机能瓶颈(这个概念)被滥用已是不争事实。 开辟者们浪费了大年夜量的时光去思虑它、担心它,(例如)非关键代码上的运行速度。这些对效力的苛求,给调试与保护造成了很大年夜的负面影响。我们理应忽视那小部分的效力,就拿(达到)97%(效力)而言,过早的优化是万恶之源。
【编辑推荐】
- 老司机带你在MySQL范畴“大年夜吉大年夜利,晚上吃鸡”
- 若何进步MySQL安然性?这简单几招来帮你
- 深刻浅出分析MySQL常用存储引擎
- MySQL关于数据字典的一个疑问
- 带你懂得MySQL体系变量设备基本
推荐阅读
沙龙晃荡 | 3月31日 京东、微博、华为拭魅战专家与你合营商量容器技巧实践! >>>详细阅读
本文标题:MySQL枚举类型的“八宗罪”
地址:http://www.17bianji.com/lsqh/40788.html
1/2 1