细读经典第三期——所有后端程序员必读神作!!!!《高性能MySQL》

如果说细读经典第二期是mysql InnoDB存储引擎的入门,那么高性能mysql则是mysql的进阶,是mysql的精髓,是数据库的精髓,是必读中的必读。当然,这本书也比前一本更加离谱,难度更大,涉猎更多,更难吃透。

走起!

但是先说一下,我们这里的顺序,和书中顺序稍有不同,我们仍旧跟着《InnoDB存储引擎》那一本的思路,从我们熟悉的mysql使用入手,再到硬件优化,再引出基准测试,最后谈一谈mysql的扩展,不限于书中的云,可能会设计容器存储之类的内容。

这里章节名称我保留原书,方便看官们做比较和查找。

第四章 schema与数据类型优化

基于数据库的设计,不在多费口舌,目前DDD大兴,传统的数据驱动早就没了踪影,这块也可以抽时间做。这里我们直接看优化。

4.1基本原则

这些原则其实我们都懂,系统的总结如下:

(1)更小的通常更更好 (2)简单就好 比如应该用mysql内建的日期类型而不是专门用字符串来存储日期和时间,mysql支持的日期时间如下

 (3)尽量避免null值

4.1.1 实数类型

实数是带有小树的数字,书中着重提了float,double,decimal的选择,这里几个记忆点吧,一个是mysql 5.0之后,decimal允许最多65个数字,且mysql自己实现了decimal的高精度运算,一般财务数据,就可以选择decimal,而一般身高体重这类数据,完全可以float或double

4.1.2 字符串类型

主要是varchar和char,这两种类型的物理存储方式和存储引擎有关,以下在Innodb存储引擎下讨论。varchar存储可变长字符串,varchar需要额外的空间存储长度信息,例如varchar(10)需要11个字节的空间,varchar(1000)需要1002个字节

char主要存储定长数据,书中举例MD5的结果,也举例了Y/N这类值,然而随着时代发展,我个人还是倾向于在实际项中统一使用varchar,一方面统一的维护性,一方面本身varchar也指定了空间,向前向后兼容性也不差,Oracle现在基本上见不到char类型数据,都是在用varchar2。当然这不妨碍我们去学习原理和使用。

4.1.3 BLOB和TEXT

在行溢出存储里我们提到过BLOB,这类二进制存储大对象的类型,在全文索引里我们也提过TEXT,其实他们属于两个不同的数据类型家族

tinytext,samlltext,text,mediumtext,longtext 对应

tinyblob,smallblob,blob,mediumblob,longblob

当然,如果条件允许,尽量避免存储这种类型的数据

4.1.4时间类型

时间类型其实很容易出现在面试题中,比如常问DateTime和TimeStamp,Datetime8字节,TimeStamp4字节,很容易想到TimeStamp的时间范围比Datetime小,同时,TimeStamp还能实现时区转换,DateTime则存储绝对时间,知道这些基本能够帮你在使用时做出选择。我个人还是推荐日期时间存为一个字段,在生产中我经历过存储两个字段的,总结一句话:使用起来真恶心,除非一些特定只需要日期或者时间的场景。

其他的数据类型在文章顶部,我就不再截图。

4.1.5特殊类型

书中举例ipv4地址,推荐使用32位无符号整数而不是varchar15来存储,再读取时用函数进行转换

其余的洋洋洒洒讲了很多,总结如下(bit,enum都没提,因为是真心用的太少太少了)

 这篇先到这吧,看完了数据类型,接下来就又是重中之重,mysql的索引,不过本书将更加深入,不仅深入索引创建,也会深入慢sql,把sql优化一网打尽。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值