MySQL之 schema设计中的陷阱

> 本节内容总结自《High Performance MySQL》

设计MySQL应该注意以下几点:

1. 避免太多的列:MySQL的存储引擎API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。从行缓冲中将编码过的列转码成行数据结构的操作代价是非常高的。MyISAM和InnoDB的行结构总是需要转换,转换的代价依赖于列的数量。
2. 避免太多的表关联:一个粗略的经验法则,如果希望查询执行的快速且并发性很好,单个查询最好在12个表以内做关联。
3. 避免过度使用枚举:仔细考虑是否需要使用枚举,如果不是在枚举列表的末尾增加值中要做一次ALTER TABLE操作。
4. 避免变相使用枚举:枚举列允许在列中存储一组定义值的单个值,集合列则允许在列中存储一组定义之中的一个或多个值,要注意选择合适的类型。
5. 避免使用一些奇怪的值代替NULL:在列中使用NOT NULL是高效的,即使需要存储一个事实上的空值也不一定要使用NULL,可以使用一些特殊的不可能出现的数字或空字符串代替。但是遵循这个原则也不要走极端。当确实需要表示未知值时也不要害怕使用NULL,因为一些未知的数字有可能导致代码复杂很多,并容易引入bug。

时间并不会因为你的迷茫和迟疑而停留,就在你看这篇文章的同时,不知道有多少人在冥思苦想,在为算法废寝忘食,不知道有多少人在狂热地拍着代码,不知道又有多少提交一遍又一遍地刷新着OJ的status页面…… 没有谁生来就是神牛,而千里之行,始于足下!
原文地址:https://www.cnblogs.com/bianjunting/p/14344211.html