Mysql schema设计中的缺陷

Posted 重学计算机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql schema设计中的缺陷相关的知识,希望对你有一定的参考价值。

  1. 太多的列

  2. 太多的关联

  3. 全能的枚举

  4. 变相的枚举

  5. 非此发明的NULL


1、多的列

从行缓冲中将编码过的列转换成行数据结构的操作代价是非常高的


2、太多的关联

EAV设计模式 - 实体(Entity)-属性(Attribute)-值(Value)是一个糟糕的设计模式,在mysql下不能靠谱的工作。Mysql限制了最多只能61张表,但是EVA数据库需要许多自关联。

如果希望查询执行的快速且并发性好的,单个查询最好在12个表以内。


3、全能的枚举

避免将一些可能涉及多个值的字段,用枚举来设计,这样如果要扩展,将是一个很糟糕的设计,因为每一次都是需要做一次ALTER TABLE,在早期版本,这个操作是阻塞的。

这种可以用整数作为外键关联到字典表活着查找表来查找具体的值


4、变相的枚举

枚举列允许在列中存储一组定义值中的单个值,集合(set)列则允许在列中存储一组定义值中的一个或者多个值,有时这会造成混乱。

如果这里真和假不会同时出现,那么毫无疑问应该使用枚举列替代集合列



5、非此发明的NULL

如果一定要存储一个“空值” 不一定非得使用null,也可以是0,某个特殊值,或者空字符串替代,但是还是要看场景,替代方案收益大,就用替代方案,不行也可以使用null



下一节 范式和反范式

以上是关于Mysql schema设计中的缺陷的主要内容,如果未能解决你的问题,请参考以下文章

MySQL Schema设计一个MySQL里的JQuery:common_schema (先存着)

MySQL Schema设计利用Python操作Schema

MySQL 数据库 Schema 设计的性能优化①:高效的模型设计

MySQL 数据库 Schema 设计的性能优化②:合适的数据类型

mysql schema设计中应避免的陷阱

MySQL《高性能MySQL》学习笔记,第四章,Schema与数据类型优化