MySQL性能调优-9.MySQL数据库Schema设计的性能优化

  1. 第九章 MySQL数据库Schema设计的性能优化
    1. 高效的模型设计
    2. 合适的数据类型
      1. 数字日期类型
      2. 字符存储类型
      3. 规范的对象命名

第九章 MySQL数据库Schema设计的性能优化

高效的模型设计

数据库Scnema满足的范式级别越高则该Schema设计的越优秀。

  • 适度冗余 - 让Query尽量减少Join
  • 大字段垂直分拆 - summary表优化
    与适度冗余相反,将大字段并且访问频率相对少的字段拆分。
  • 大表水平拆分 - 基于类型的分拆优化
    如通过标识字段标识出管理员发布或是普通用户发布,减少检索成本。
  • 统计表 - 准实时优化

合适的数据类型

  1. 通过选用更『小』的数据类型减少存储空间。
  2. 通过更合适的数据类型加速数据的比较。

数字日期类型

对于数字的存储,一般使用到浮点型数据的场合也不应该太多。主要出于两个原因,一个是浮点型 数据本身实际上是一个并不精确的数字,只是一个近似值,
另一个原因就是完全可以通过乘以一个固定 的系数转换为整型数据来存放。这样不仅可以解决数据不精确的问题,同时也让数据的处理更为高效。

时间存储格式总类并不是太多,我们常用的主要就是 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的不同:

  1. 不能设置默认值
  2. 只有TEXT可以设置大小
  3. 这四种类型的索引必须指定前缀长度

BIT类型: 默认大小为1 最大为64bits

SET和ENUM类型使用在较少变化状态并且值比较少的字段。

规范的对象命名

  1. 数据库和表名应尽可能和所服务的业务模块名一致。
  2. 服务于同一子模块的一类表尽量以子模块名(或部分单词)为前缀或后缀。
  3. 表名应尽量包含与所存放数据相对应的单词。
  4. 字段名称也尽量保持和实际数据相对应。
  5. 索引名称尽量包含所有的索引键字段名或者缩写,各字段名在索引名中的顺序应与索引键在 索引中的索引顺序一致。
  6. 约束等其他对象也应该尽可能包含所属表或其他对象的名称,以表名各自关系。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏