作家
登录

MySQL枚举类型的“八宗罪”

作者: 来源: 2018-03-20 19:39:36 阅读 我要评论

  • | foobar |  
  • +--------+  
  • | 1 |  
  • | 0 |  
  • +--------+  
  • rows in set (0.00 sec) 
  • 用回扑克牌的例子。扑克游戏老少皆宜,依附的规矩是梅花和黑桃为黑色,方块和红心为红色(例如,尤克牌)。如不雅我们须要为花色接洽关系额外的信息,例如色彩,那将若何?如不雅我们应用关系表,那我们只须要在关系表中新增字段即可,小事一桩。如不雅我们应用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%(效力)而言,过早的优化是万恶之源。

    【编辑推荐】

    1. 老司机带你在MySQL范畴“大年夜吉大年夜利,晚上吃鸡”
    2. 若何进步MySQL安然性?这简单几招来帮你
    3. 深刻浅出分析MySQL常用存储引擎
    4. MySQL关于数据字典的一个疑问
    5. 带你懂得MySQL体系变量设备基本
    【义务编辑:庞桂玉 TEL:(010)68476606】

      推荐阅读

      基础设施无边界:企业如何在多云世界中重新考虑IT

    沙龙晃荡 | 3月31日 京东、微博、华为拭魅战专家与你合营商量容器技巧实践! >>>详细阅读


    本文标题:MySQL枚举类型的“八宗罪”

    地址:http://www.17bianji.com/lsqh/40788.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)