高质量解读《高性能mysql》——第4章Schema与数据类型优化

前言:

高效读书,一张逻辑图带你读懂、读薄书中重点。

深入学习MySQL系列,解读的目的是为了把书读薄,抽出重点进行梳理、理解、运用。因大量文字很容易让人觉得枯燥无味,为此博主花费一定精力和时间整理输出为逻辑思维图,以便大家学习和参考。

--------------------------------------------------------------------------------------
注:下面文字只是对逻辑思维图的”翻译“,节省时间,只看图即可。 

目录

Schema与数据类型优化思维逻辑图 

选择优化的数据类型

MySQL schema 设计中的陷阱

范式和反范式

缓存表和汇总表

加快ALTER TABLE 操作的速度

总结


 

Schema与数据类型优化思维逻辑图 

高质量解读《高性能mysql》——第4章Schema与数据类型优化_第1张图片

选择优化的数据类型

如何选择正确的数据类型

  • 更小的通常更好
  • 更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存
  • 简单就好
  • 简单的数据类型的操作通常需要更少的CPU周期
  • 能用整型不用字符串(用整型存储IP地址)
  • 能用内建类型不用字符串(日期和时间)
  • 尽量避免NULL
  • 数据类型
  • 实数类型
  • 字符串类型
  • 日期和时间类型
  • 位数据类型
  • 选择标识符(identifier)
  • 特殊类型数据

MySQL schema 设计中的陷阱

  • 太多的列
  • 从行缓冲中将编码过的列转换成数据结构的操作代价是非常高的
  • 太多的关联
  • 单个查询最好在12个表以内做关联
  • 全能的枚举
  • 变相的枚举
  • 非此发明的NULL

范式和反范式

范式的优点和缺点

优点

  • 范式化的更新操作通常比反范式化要快
  • 当数据较好地范式化时,就只有很少或者没有重复数据,所以需要修改更少的数据
  • 范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快
  • 很少有多余的数据意味着检索列表数据时更少需要DISTINCT或者GROUP BY语句

缺点

  • 通常需要关联
  • 可能使一些索引策略无效

反范式的优点和缺点

优点

  • 避免过多的关联
  • 使用更有效的索引策略

缺点

全表扫描

混用范式化和反范式化

最常见的反范式化数据的方法是复制或者缓存,在不同的表中存储相同的特定列

缓存表和汇总表

物化视图

概念

物化视图实际上是预先计算并且存储在磁盘上的表,可以通过各种各样的策略刷新和更新

组成

  • 变更数据抓取功能,可以读取服务器的二进制日志并且解析相关的变更
  • 一系列可以帮助创建和管理视图的定义的存储过程
  • 一些可以应用变更到数据库中的物化视图的工具

计数器表

增加多行数据,选择一个随机的槽(slot)进行更新,查询时sum聚合

加快ALTER TABLE 操作的速度

  • 只修改.frm文件
  • 快速创建MyISAM索引

总结

  • 尽量避免过度设计,例如设计及其复杂查询的schema设计或者有很多列的表设计
  • 使用小而简单的合适数据类型,除非真实数据模型中有确切的需要,否则应该尽可能地避免使用NULL值
  • 尽量使用相同的数据类型存储相似或者相关的值,尤其是要在关联条件中使用的列
  • 注意可变长字符串,在临时表和排序时可能导致悲观的按最大长度分配内存
  • 尽量使用整型定义标识列
  • 避免使用MySQL已经遗弃的特性,例如指定浮点数的精度,或者整数的显示宽度
  • 小心使用ENUM和SET。虽然它们用起来很方便,但是不要滥用,否则有时候会变成陷阱
  • 范式是好的,但是反范式(大多数情况下意味着重复数据)有时也是必需的,并且能带来好处
  • 预先计算、缓存或者生成汇总表也可能获得很大的好处
  • ALTER TABLE在大部分情况下,会锁表并且重建整张表。对于大部分场景,必须使用其更常规的方法,例如在备机上执行ALTER 并在完成后把它切换为主库

以上内容均为博主原创手码梳理。码字不易,但只要能提高,都是值得的。如果您觉得,这篇文章对您的基础知识学习、巩固、提高有帮助,欢迎点赞、分享、收藏,谢谢。 --天天water 

你可能感兴趣的:(高质量解读《高性能mysql》)