Mysql性能优化之数据类型优化

一、选择正确的数据类型对于获得高性能至关重要
1.1更小的通常更好
占用更少的磁盘、内存和CPU缓存
1.2尽量避免null
如果查询中包含可为null的列,对Mysql来说更难优化,因为可为null的列使得索引、索引统计和值都更复杂。会使用更多的存储空间.
2、整数和实数
整数tinyint、smallint、mediumint、int、bigint分别使用8,16,24,32,64位存储空间
实数delcimal存储精确的小数支持精确运算、float和double支持浮点运算进行近似计算
3、字符串类型
varchar和char类型
varchar类型用于存储可变长字符串,比定长类型更节省空间。varchar需要使用1或者2个额外字节记录字符串长度,如果列的最大长度小于或等于255字节需要使用1个字节表示否则使用2个字节,比如一个varchar(10)的列需要11个字节的存储空间。varchar(1000)的列需要1002个字节。
char类型是定长的,char很适合存储很短的字符串,或者所有值都接近同一个长度
4、blob和text类型
blob和text类型分别采用二进制和字符方式存储
5、enum枚举类型
枚举字符串列表是固定的,添加或删除字符串必须使用alter table。
6、日期和时间类型
datetime和timestamp。
datetime能保存很大范围的值,从1001年到9999年精度为秒,他把日期封装到YYYYMMDDHHMMSS的整数中,与时区无关。使用8个字节的存储空间。
timestamp类型保存了从1970年1月1日午夜以来的描述,timestamp只使用了4个字节的存储空间只能表示1970年到2038年。timestamp默认为not null。
除了特殊行为之外,通常应该尽量使用timestamp,因为它比datatime空间效率更高。
7、选择标识符(identifier)
为标识列选择数据类型的时候应该选择与关联表一样的类型,整数通常是标识列最好的选择,并且可以使用auto_increment。
二、mysql schema设计中的陷阱
2.1太多的列
mysql的存储引擎api工作时需要在服务层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务层将缓冲内容解码成各个列。从行缓冲中将编码过的列转换行数据结构的操作代价是非常高的
2.2太多的关联
mysql限制了每个关联操作最多只能有61张表,单个查询最好在12个表以内做关联
2.3alter table操作的速度
mysql的alter table操作的性能对大表来说是个大问题。mysql执行大部分修改表结构操作的方法是用新的结构创建一个空白表,从旧表中查出所有数据插入新表,然后删除旧表。
所有的modify column操作都将导致表重建,理论上列的默认值存储在.frm文件中,但是可以通过alter column操作来改变列的默认值
alter table xxx
alter column xxx set default 5;
alter table 是件让人痛苦的操作,大部分情况下都会锁表并且重建整张表。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值