高性能MySQL-schema与数据类型优化

选择优秀的数据类型
1:更小的通常更好(尽量使用可以正确存储数据的最小数据类型)
2:简单就好
3:尽量避免null

整数类型
1:tinyint(8),smallint(16),mediumint(24),int(32),bigint(64)
2:unsigned属性表示不允许负数,比允许负数大一倍
3:有无符号类型使用相同的存储空间,并且具有相同的性能
4:MySQL可以为整数类型指定宽度,大多数没意义

实数类型
1:MySQL即支持精确类型,也支持不精确类型。
2:float和double类型支持使用标准的浮点运行进行近似运算
3:decimal类型用于存储精确的小数(5.0以上支持精确计算)
4:decimal和浮点类型可以指定精度
5:decimal类型允许最多65个数字,decimal只是一种存储格式在计算中decimal会转化为double类型
6:MySQL使用double作为内部浮点计算的类型
7:decimal需要额外开销和计算开销,所以应该尽量只对小数进行精确计算才使用
8:数据量比较大的时候,可以考虑bigint代替decimal

varchar
1:用于存储可变长字符串,比定长类型更省空间
2:需要额外使用1或2个额外字节记录字符串长度(255以下包括1个字节,255以上2个字节)
3:字符串最大长度比平均长度大很多;列的更新很少,所以碎片不是问题;适应像UTF-8这样复杂字符集,每个字符都使用不同字节数进行存储
4:InnoDB把过长varchar存储为blob

char
1:定长
2:MySQL会删除所有末尾空格
3:适合存储很短字符串,或者所有值都接近同一个长度;经常变更数据,不易产生碎片;非常短的列

binary和varbinary
1:存储二进制字符串
2:\0填充,检索也不会去掉填充值

BLOB和text
1:都是为了存储很大的数据的字符串数据类型,分别采用二进制和字符方式存储
2:值过大时,InnoDB使用外部存储区域进行存储
3:blob二进制数据没有排序规则,text有字符集和排序规则
4:只对每个列最前面max_sort_length
5:磁盘临时表和文件排序

枚举(enum)代替字符串
1:枚举列代替常用字符串类型,可以把一些不重复字符串存储成一个预定义集合
2:MySQL在存储枚举非常紧凑,会根据列表值的数量压缩到一两个字节,会将每个值在列表的位置保存为整数
3:可以使用field()函数显示地指定排列顺序,但会导致MySQL无法利用索引消除排序
4:枚举最不好的地方是字符串列表是固定的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值