因为把公司 Mysql 一堆带 null 字段优化非空带默认值被骂
刚来一家新公司注意到数据库里新建的表有一堆 null 值的字段,想数据量大会影响索引,项目也刚开我就改了下,然后就被训了,就说别动数据库,非不非空让前端去判断(我就想是前端判断啊,但后端不也要校验,数据库只是优化查询)但我没之声 而且好多字段都是中英混用,可难受死我这强迫症了 比如父 id fid 组织类型 orglx 行政区划代码 xzqh 行政区域编码却是 adcode [捂脸.jpg]
刚来一家新公司注意到数据库里新建的表有一堆 null 值的字段,想数据量大会影响索引,项目也刚开我就改了下,然后就被训了,就说别动数据库,非不非空让前端去判断(我就想是前端判断啊,但后端不也要校验,数据库只是优化查询)但我没之声 而且好多字段都是中英混用,可难受死我这强迫症了 比如父 id fid 组织类型 orglx 行政区划代码 xzqh 行政区域编码却是 adcode [捂脸.jpg]
当然, 以上是我最近面试需要, 看了一些八股文瞎猜的
数据库 /存储引擎有很多选择,版本也有很多,很多网上的奇淫技巧只针对于特定的版本有效,没有必要纠结在这些小问题上,国内很多公众号、技术文章现在基本上都是广告居多,颇有点中医理论的味道。
被同化后你想找下份工作就难了
V2 和知乎也经常看到问,为什么上一任程序员看到垃圾代码不去优化
有些代码是用时间、用钱逐个坑填上,你看到的只是最终结果
比如“生日”这个字段,如果是在一个存放“出生婴儿”的表里,那么这个字段就应该是不可空的,因为出生婴儿必然有个出生日期(生日)这个逻辑没问题吧。
再比如“成绩”字段, 0 和 空 是不同的概念,空代表“未知”、“未设置”,0 代表有成绩,就是 0 分。所以如果表里的成绩允许有“未知”、“未设置”这个概念的话,应该设置为可空类型。而不应设置为不可空类型,默认值 -1 之类的。
此例中如果设置不可空默认值-1 的问题在于,数据必须在某个层级将 -1 转化为 “空”才能展示到界面,而用户在界面上未显式设置时又要将“空”设置为 -1 再保存,繁琐而现实意义不大。
reference: https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format.html
过早优化常常会带来其它的问题。除非这是张大表,有复杂的索引等等。
从设计本身角度,更推荐该空即空。
此外变更前与同事取得一致也是一种尊重。
但是,汉语拼音不能忍……估计我看到也会很难受。
影响索引也不知道是哪来的以讹传讹的说法
很多时候性能就是这里一点那里一点扣下来的
主你的问题在于没和别人讨论就改已有的东西,这样不太好
段子:
> 文艺程序员尝试把代码写得别人看起来方便,普通程序员尝试把代码写得自己看起来方便,二逼程序员尝试把代码写得机器看起来方便。
> 半年以后,文艺程序员看自己代码,看不出是自己写的,但看得懂;普通程序员看自己代码,看得出是自己写的,但看不懂;二逼程序员看自己代码看了半天,破口大骂 “这是哪个 XX 写的代码?”。
段子受教了,我还有很长的路要走 :muscle: