MySQL数据库性能优化

一、表结构优化

由于mysql是基于行(row)的数据库,数据库在操作IO的时候是以page的方式。也就是说,如果我们每条记录所占用的空间量减小,每次page中所存放的数据行数就会增大,那么每次IO可访问的行数也就增大。此外,由于内存有限,增加每个page中存放的数据行数,就等于增加每个内存块中的缓存数据量,提升缓存命中率。

数据类型选择

数据库操作中最为耗时的是IO处理,大部分数据库操作90%以上的时间都花在IO读写上面。所以尽可能减少IO读写量。

1、数字类型:

非万不得已不要使用double,不仅仅是存储长度的问题,同时还存在精确性的问题。同样,固定精度的小数,也不建议使用decimal,建议乘以固定倍数转换成整数存储,可以大大节省存储空间,且不会带来任何附加维护成本。

对应整数的存储,在数据量较大的情况下,建议区分开tinyint/int/bigint的选择,因为三者占用的存储空间也有很大的差别。

2、字符类型:

非万不得已不要使用text数据类型,其处理方式决定了他的性能要低于char和varchar类型的处理。定长字段,建议使用char类型,不定长字段尽量使用varchar,且仅仅设定适当的最大长度。

3、时间类型:

尽量使用timestamp类型,因为存储空间只需要datetime类型的一半。对于只需要精确到某一天的数据,建议使用date类型,因为它的存储空间只需要3个字节,比timestamp还少。

4、lob:

强烈反对在数据库中存放 LOB 类型数据,用更适合的工具,才可以发挥到极致。而且LOB 类型数据的访问不是线程安全的,需要为其单独分配相应的数据库资源,并在操作完成后释放资源。

适当拆分

当我们的表中存在类似于text或者很大的varchar类型的大字段的时候,如果我们访问这张表的时候大部分都不需要这个字段,将其拆分到另外的独立表中,减少占用的存储空间。提高内存的缓存命中率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值