《高性能MySQL》学习笔记二

今天打算继续学习《高性能MySQL》的第四章,有关数据库的优化。

Schema与数据类型优化

前置知识:如何设计数据库?
关于这方面我是在CSDN博客上找文章看的。

选择优化的数据类型

三大原则:(简单、小、避免null)
1.更小的通常更好:更小的数据类型占用更少的磁盘、内存和CPU缓存,因此处理得更快。(不会超过存储的值的范围的最小类型)
2.简单就好:简单的数据类型操作通常需要更少的CPU周期,如整型要优于字符型操作。使用date、time、datetime等MySQL内建的类型,而不是使用字符串来存储日期和时间,应该使用整型存储IP地址。
3.尽量避免null:null值使得mysql更难优化,也会使用更多的存储空间。

在为列选择数据类型时,第一步需要确定适合的大类型:数字,字符串,时间等;第二步,选择具体的类型,例如datetime和timesamp都可存储时间和日期类型,但两者各有优缺点,需要合理选择。

数据类型

1.整数类型
tinyint, smallint, mediumint, int, bigint,分别使用8, 16, 24, 32, 64位存储空间。其可存储值的范围为-2^(n-1)~2^(n-1)-1,n表示存储空间的位数。
使用unsigned属性(相当于无符号位吧,即数字位变为n),可以使整数不允许为负值,这使得正数的上限提高一倍,即tinyint unsigned可以存储0~255,而tinyint的存储范围是-128~127.
2.实数类型
decimal:一种高精确的计算类型,最多允许65个数字。
float与double:浮点运算求得较精确的值。float使用4个字节存储,double占用8个字节。mysql使用double作为内部浮点计算的类型。
在选择类型时,只有对小数进行精确计算时才使用decimal。
3.字符串类型
varchar类型:用于存储可变长字符串,是最常见的字符串数据类型,其比定长的类型更加节省空间。
varchar需要额外使用1个或2个额外的字节记录字符串的长度。若列的最大长度大于255字节,采用2个额外字节记录,反之,使用1个字节。即varchar(100)需要101个字节存储空间,而varchar(1000)需要1002个字节存储空间。
char类型:定长,当存储char类型的值时,mysql会删除所有的末尾空格,但不会删除其他地方的空格。char适合存储很短的字符串,或者所有值都接近同一个长度,对于经常变更的数据char也比varchar更好。
注:varchar会保留字符末尾的空格;Memory引擎只支持定长的行,即使有变长的字段也会依据最大长度分配最大空间;对于varchar类型,分配短的列比长的列好(如varchar(5)优于varchar(200),在其都能合理存储某个数据时),最好的策略是分配真正需要的空间。
4.BLOB和TEXT类型
BLOB和TEXT都是为了储存很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。
MySQL把每个blob和text值当作一个独立的对象处理。当其值太大,InnoDB会利用“外部”的存储区域来进行存储,此时在每个值的行内存储一个指针,然后在实际区域存储实际的值。
MySQL不能将BLOB和TEXT列全部长度的字符串进行索引,也不能使用这些索引消除排序。
5.日期和时间类型
datetime类型:能保存大范围的值,从1001到9999,精度为秒,与时区无关,使用8字节的存储空间。
timestamp类型:从1970.1.1~2038,比datetime小得多,只使用4个字节的存储空间,并且其值也依赖于时区。
通常建议尽量使用timestamp,谁叫它比小呢,空间效率要比datetime高很多。
6.位数据类型
bit类型:在5.0之前bit与tinyint相同,在之后成为了一个新的数据类型。可以使用bit列在一列中存储一个或者多个“true/false”值,bit(1)就是1位,bit(2)就是2位。bit存储的是二进制0/1字符串。
set类型:如果需要保存很多true/false值,可以考虑合并这些列到一个set数据类型,set即就是一些列打包的位的集合。

接下来的内容就简单记录下:
1,利用范式标准优化表的设计
2,建立缓存表存储读取过程中的数据,建立汇总表来存储group by语句聚合的数据,提升性能。
….(到时候返回来再看吧,有点难理解)。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值