高质量解读《高性能mysql》——第4章Schema与数据类型优化
作者:互联网
前言:
高效读书,一张逻辑图带你读懂、读薄书中重点。
深入学习MySQL系列,解读的目的是为了把书读薄,抽出重点进行梳理、理解、运用。因大量文字很容易让人觉得枯燥无味,为此博主花费一定精力和时间整理输出为逻辑思维图,以便大家学习和参考。
--------------------------------------------------------------------------------------
注:下面文字只是对逻辑思维图的”翻译“,节省时间,只看图即可。
目录
Schema与数据类型优化思维逻辑图
选择优化的数据类型
如何选择正确的数据类型
- 更小的通常更好
- 更小的数据类型通常更快,因为它们占用更少的磁盘、内存和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,数据类型,视图,mysql,Schema 来源: https://blog.csdn.net/qq_21794823/article/details/106772852