SQL极简教程 · MySQL · MyBatis · JPA 技术笔记 教程 总结mysqlMySQL

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

2017-10-12  本文已影响36人  阿亮私语

前言

版本号 说明
Mysql 5.6.37 MySQL Community Server (GPL) 5.0以上版本即可

这一章主要为接下来的两章《创建高性能的索引》和《查询性能优化》做铺垫,这三章是mysql性能优化的核心内容,这里会讨论逻辑设计,物理设计和查询执行以及彼此之间的相互作用。需要我们既关注全局又关注局部细节。

4.1、数据类型的选择

、常见的优化技巧
4.1.2、常用数据类型
数据类型 大小 范围 说明
tinyint 1个字节 有符号(-128 到127),无符号(0到255) 默认为有符号
int 4个字节 有符号(- 2^23 ~ 2^23 – 1) 默认为有符号
bigint 8个字节 有符号(-2^63 ~ 2^63 - 1) 默认为有符号
float 4字节 有符号(- 2^23 ~ 2^23 – 1) 单精度浮点
double 8字节 双精度浮点
decimal 不确定 不确定 精确计算
数据类型 大小 说明
char 0-255字节 定长字符串
varchar 0-65535字节 变长字符串
tinyblob 0-255字节 小二进制字符串
tinytext 0-255字节 小文本字符串
blob 0-65535字节 二进制字符串
text 0-65535字节 文本字符串
mediumblob 0-(2^24-1)字节 中等二进制字符串
mediumtext 0-(2^24-1)字节 中等文本字符串
longblob 0-(2^32-1)字节 大二进制字符串
longtext 0-(2^32-1)字节 大文本字符串

除此之外,还有BINARY、VARBINARY、ENUM、SET四种类型

FAQ
3、Enum枚举类型

值也可以是空串("") 或 NULL

SELECT e FROM enum_test ORDER BY FIELD(e,'apple','dog','fish');
4、日期类型

|数据类型|大小|格式|说明|
| -- |-- | -- |
| date |3字节 | YYYY-MM-DD |日期值|
| datetime |8字节 | YYYY-MM-DD HH:MM:SS |时间和日期值|
| timestamp |4字节 | YYYYMMDDHHMMSS |时间戳|

备注
如果没有特殊需求,日期还是建议存储成long类型的时间戳,这样前后端处理比较统一和方便。

4.2、MySQL schema设计中的陷阱

4.3、范式和反范式

在数据库设计中,完全的范式化和完全的反范式化都是实验室中才会存在的,在实际开发过程中很少有这样的使用,需要经常使用。

4.4、缓存表,汇总表,物化视图,计数器表

这里介绍的相对比较简单,再后期实际应用中进行介绍。

4.5、加快alter table 的操作速度

这是这几张第一个实际相关操作的功能。我们详细的分析一下。
&MySQL alter一个超大表低效率低的原因

  1. mysql中alter表的机制是:创建一个符合alter目标的表,然后把数据全部插入到新表中,然后删除老表。
  2. 在数据迁移时,每插入一行,需要对索引进行一次更新。效率低下且会产生索引碎片
  3. 当没有足够的内存,或者表上的索引非常多时,效率十分的低下。
.frm:表结构文件  .MYD:表数据文件  .MYI:表索引

1、 有时候只是改变某个列的配置,比如默认值等等,可以使用ALTER TABLE XXX.XXX ALTER COLUMN XXXX;使用ALTER COLUMN不要使用MODIFY COLUMN,这样修改操作是非阻塞的。

mysql> ALTER TABLE sakila.film
    ->MODIFY COLUMN rental_duration TINYINT(3)  NOT NULL DEFAULT 5;
mysql>ALTER TABLE sakila.film
->ALTER COLUMN rental_duration SET DEFAULT 5;

对比下这两种操作,耗时是不一样的。
2、修改frm文件,这是大神才做的,甚做。

《高性能MySQL读书笔记》

准备篇-mysql安装
准备篇-Sakila数据库
第一章、MySQL架构及历史
第二章、MySQL基准测试
第三章、服务器性能剖析

上一篇 下一篇

猜你喜欢

热点阅读