高性能MySQL读书笔记(4)--Schema与数据类型优化

本文详细探讨了MySQL数据库的Schema与数据类型优化,强调了选择合适数据类型的重要性,如考虑存储空间、CPU运算成本和避免NULL。整数类型中,推荐使用可选的UNSIGNED属性以节省空间。实数类型中,浮点数如FLOAT和DOUBLE在存储和计算方面较DECIMAL高效。字符串类型中,VARCHAR适合存储可变长字符串,而CHAR适合定长字符串,BLOB和TEXT用于存储大量数据。枚举和SET类型可以替代部分字符串,但变更成本高。日期和时间类型如DATETIME和TIMESTAMP各有优缺点,根据需求选择。位数据类型如BIT和SET适用于存储多位值。此外,文章还提醒避免使用自动生成的schema和ORM系统导致的性能问题,以及注意范式和反范式设计的权衡。
摘要由CSDN通过智能技术生成

第四章:Schema与数据类型优化

良好的逻辑设计和物理设计是高性能的基石

Schema是什么?

在数据库中,schema是数据库的组织和结构。模式中包含了schema对象,可以是(table)、(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、**外键(**foreign key)等

4.1 选择优化的类型数据

几个简单的原则
  1. 更小的通常最好:应该尽量使用可以正确存储数据的最小数据类型(例如只需要存0~200,tinyint unsigned更好),因为占用更少的磁盘,内存,CPU缓存。但是要确保没有低估存储的值的范围,后期要修改的话很麻烦
  2. 简单就好:简单数据类型的操作通常需要更少的CPU周期。例如:整型比字符操作代价更低,因为字符集和校对规则使字符比较比整型更复杂
  3. 尽量避免NULL:如果查询中包含可为NULL的列,对MySQL来说更难优化,因为NULL的列使得索引,索引统计和值都更复杂
4.1.1 整数类型

整数有可选的UNSIGNED属性,表示不允许负值,这大概可以使正数的上限提高一倍

有符号和无符号类型使用相同的存储空间,并具有相同的性能

MySQL可以为整数类型指定宽度,例如INT(20),对大多数应用这是没有意义的,它不会限制值的合法范围,只是规定了MySQL的一些交互工具用来显示字符的个数。对于存储和计算来说,INT(1)和INT(20)是相同的

4.1.2 实数类型

实数是带有小数部分的数字,它们不仅为了存储小数部分,也可以使用DECIMAL存储比BIGINT还大的正数。MySQL既支持精确类型,也支持不精确类型。

DECIMAL类型用于存储精确的小数,可以指定精度。

浮点类型在存储同样范围的值时,通常比DECIMAL使用更少的空间。FLOAT使用4个字节存储,DOUBLE占用8个字节,相比FLOAT有更高的精度和更大的范围。

由于需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用,例如存储财务数据。

4.1.3 字符串类型

每个字符串可以定义自己的字符集和排序规则,这些东西很大程度上影响性能。

VARCHAR和CHAR是两种主要的字符串类型

VARCHAR

VARCHAR类型用于存储可变长字符串,是最常见的字符串数据类型,它比定长类型更节省空间,因为它仅使用必要的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值