schema设计陷阱


除了字段的正确选择,schema设计的时候也有一些问题需要注意。

太多的列

MySQL在工作的时候需要通过行缓存拷贝数据,之后进行解码转换成需要的列。然而转换是需要代价的,在MySQL中,MyISAM的变长行结构和InnoDB的行结构每次都需要转换,转换的代价依赖于列的数量,因此需要避免太多的列出现在表中。

太多的关联

表设计的时候难免少不了关联,但是MySQL限制了每个关联操作最多只能有61张表,有时候尽管少于61张表,但是在执行速度上也会产生影响。如果希望查询执行得快速且并发性好,单个查询最好在12个表以内做关联。

过度使用枚举

有些字段使用枚举是个不错的选择,但是过度的进行ALTER TABLE会产生阻塞,因为枚举的ALTER TABLE是一个阻塞操作(新版本末尾增加值不是ALTER TABLE操作)。

合理的NULL

可为NULL的列会使用更多的存储空间,在MySQL里也需要特殊处理。当可为NULL的列被索引时,每个索引记录需要一个额外的字节,在MyISAM里甚至还可能导致固定大小的索引(例如只有一个整数列的索引)变成可变大小的索引,如果计划在列上建索引,就应该尽量避免设计成可为NULL的列。但是有些场景比如使用−1代表一个未知的整数,可能导致代码复杂且容易发生错误。因此使用合理的NULL是一个关键。

MySQL会在索引中存储NULL值,而Oracle则不会。

猜你喜欢

转载自blog.csdn.net/MAKEJAVAMAN/article/details/119712577