外贸网站建设大概多少钱,垂直购物网站建设,服装培训网站建设,网站群建设模板迁移原站迁移pc在sql的优化中#xff0c;会有同学提到一点#xff1a;使用enum字段类型#xff0c;代替其他tinyint等类型。以前这也是不少人喜欢优化的#xff0c;但是现在细想#xff0c;是非常不合理的。 优点#xff1a; 1.可以设置区间范围#xff0c;比如设置性别#xff1a;1男… 在sql的优化中会有同学提到一点使用enum字段类型代替其他tinyint等类型。以前这也是不少人喜欢优化的但是现在细想是非常不合理的。 优点 1.可以设置区间范围比如设置性别1男2女3未知。如果这是出现一个非1、2、3类型的一眼就是脏数据了。 缺点 1.数据迁移的时候他几乎不可能被其他数据库所支持如果enum里面是字符串对于其他数据库来说就更郁闷了还不能设为tinyint等类型的字段enum虽然可以存储字符串但对于内部来说还是以顺序进行索引比如a,b,c我们也可以用索引值来获取值select * from tbl_name whre enum 2这与select * from tbl_name where enum b等义如果你看明白了这两句SQL为什么等义那么你也就可以了解为什么不主张用enum字段了。 2.如果一个设计不合理的ENUM字段比如一个enum字段的范围是(0,1,2,3)这时候你会不会哭呢要知道enum的枚举值对应的索引是从1开始的。比如执行INSERT INTO test1(id, sex) VALUES (1, 1)表中实际存储你就会发现你插入的并不是1而是0。 3.更有甚者由于enum的区间也是可以变动的如果你在enum的枚举字段范围中加一个值并且不是加在最后那么也就相当于你把原来的范围都改变了索引值试想这又是多么一个恐怖的事情 总结 如果你的系统中真的已经使用了mysql的enum字段类型请在查询的时候直接查询值并加上单引号这样就不会使用enum自身隐藏的索引值来获取结果了。【顺便说一下enum的默认索引是从NULL开始如果你允许NULL并default NULL】 建议 如果字段是字符串并且长度固定可以尝试用char如果是数值型还是用tinyint只占一个字节吧比较安全稳定而且即使迁移问题也不大。 如有错误欢迎热心指正。 转载于:https://www.cnblogs.com/luoliuniankk/p/9763880.html