MySQL性能调优-9.MySQL数据库Schema设计的性能优化
第九章 MySQL数据库Schema设计的性能优化
高效的模型设计
数据库Scnema满足的范式级别越高则该Schema设计的越优秀。
- 适度冗余 - 让Query尽量减少Join
- 大字段垂直分拆 - summary表优化
与适度冗余相反,将大字段并且访问频率相对少的字段拆分。 - 大表水平拆分 - 基于类型的分拆优化
如通过标识字段标识出管理员发布或是普通用户发布,减少检索成本。 - 统计表 - 准实时优化
合适的数据类型
- 通过选用更『小』的数据类型减少存储空间。
- 通过更合适的数据类型加速数据的比较。
数字日期类型
对于数字的存储,一般使用到浮点型数据的场合也不应该太多。主要出于两个原因,一个是浮点型 数据本身实际上是一个并不精确的数字,只是一个近似值,
另一个原因就是完全可以通过乘以一个固定 的系数转换为整型数据来存放。这样不仅可以解决数据不精确的问题,同时也让数据的处理更为高效。
时间存储格式总类并不是太多,我们常用的主要就是 DATETIME,DATE 和 TIMESTAMP 这三种了。从存储空间来看 TIMESTAMP 最少,四个字节,
而其他两种数据类型都是八个字节,多了一倍。而TIMESTAMP 的 缺点在于他只能存储从1970 年之后的时间,而另外两种时间类型可以存放最早从1001年开始的时间。
如果有需要存放早于 1970 年之前的时间的需求,我们必须放弃 TIMESTAMP 类型,但是只要我们不需要使用 1970 年之前的时间,最好尽量使用 TIMESTAMP 来减少存储空间的占用。
字符存储类型
CHAR类型属于静态长度类型,不管实际存放多长数据,后面都会用空格补齐,所以实际数据中需要在最后存储空格,则不能使用CHAR类型。
VARCHAR类型属于动态存储长度类型,5.0.3版本前最大只能存255字符,此后可以存储65535 bytes的数据。
注: MySQL 会在每个 VARCHAR 数据中使用 1 个或 者 2 个字节用来存放 VARCHAR 数据的实际长度,当我们的实际数据在255字节之内的时候,
会使用 1 字节 来存放实际长度,而大于 255 字节的时候,则需要使用 2 字节来存放。
TINYTEXT,TEXT,MEDIUMTEXT 和 LONGTEXT 这四种类型同属于一种存储方式,都是动态存储长度类型。
与CHAR和VARCHAR的不同:
- 不能设置默认值
- 只有TEXT可以设置大小
- 这四种类型的索引必须指定前缀长度
BIT类型: 默认大小为1 最大为64bits
SET和ENUM类型使用在较少变化状态并且值比较少的字段。
规范的对象命名
- 数据库和表名应尽可能和所服务的业务模块名一致。
- 服务于同一子模块的一类表尽量以子模块名(或部分单词)为前缀或后缀。
- 表名应尽量包含与所存放数据相对应的单词。
- 字段名称也尽量保持和实际数据相对应。
- 索引名称尽量包含所有的索引键字段名或者缩写,各字段名在索引名中的顺序应与索引键在 索引中的索引顺序一致。
- 约束等其他对象也应该尽可能包含所属表或其他对象的名称,以表名各自关系。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yanglau0527@gmail.com
文章标题:MySQL性能调优-9.MySQL数据库Schema设计的性能优化
文章字数:938
本文作者:Cynaith
发布时间:2020-06-08, 02:37:15
最后更新:2020-06-08, 02:37:28
原始链接:https://cynaith.github.io/2020/06/08/MySQL%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98-9-MySQL%E6%95%B0%E6%8D%AE%E5%BA%93Schema%E8%AE%BE%E8%AE%A1%E7%9A%84%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。