这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战
前言: 本篇文章 是我关于MySQL的第27篇文章,水平一般、能力有限。文章写的比较浅,适合新手来看。本篇文章简单介绍一下MySQL schema 设计中的陷阱
MySQL schema 设计中的陷阱
1.在使用枚举时要注意
如果在设计时不能确定之后是否还要添加其他类型,一般来说不要使用枚举。因为在枚举列中添加数据。需要对整个表做一个alter操作,众所周知这样会直接阻塞掉整张表。在生产环境一定要注意慎用。
2.数据库中的null
如果不是有必须要null的场景,一般情况下不要使用null字段。
- null字段会导致统总数时总计不到。而且会将null值存储到索引中。
- null值到非null的更新无法做到原地更新,更容易发生索引分裂,从而影响性能。
- null字段在not ! 等反向选择时时不会被选择到的 我们可以使用空字符串,0等等字段来代替null。
3.别关联太多表
表关联时,最好不要太多。之前我们的开发手册中标明,表关联不要超过4张。一些大的互联网公司更是推崇单表,然后所有业务都在后台代码中进行关联操作。而且也会影响分库分表的效率。而且关联的字段之前一般都需要加索引,不然数据量大时两个表做笛卡尔积会巨慢。
推荐在表设计时尽可能的将一些关键字段,如订单号这种公用字段加到每个表中。能从设计角度避免关联查询是最好的。
4.对多列进行拆分
MySQL的存储引擎在对大量的列进行转换时会占用很高的CPU,但是一般情况下。很多字段都是用不到的,冗余的。单表中存储大量的列不仅不利于业务的梳理,对性能的影响也是巨大的。服务器层将编码过的列转成行数据结构的操作代价是非常高的。