MYSQL数据库性能优化方案

1.数据类型的选取
  能用占用字节少的字段就不用大字段 。 比如主键强烈建议用 int整形不用 guid,节省空间,空间就是效率,4个字节和 32个字节相比定位一条记录 ,当然是 4字节 的数据快了。当涉及几个表 做
join连接操作时效果就更加明显了。更小的字段类型占用的内存就少 ,占用的磁盘空间和磁盘 I/O也会更少 ,而且还会占用更少的带宽 。
1.1 数值类型
   在MySQL 中支持的 5个主要整数类型是 TINYINT、 SMALLINT、MEDIUMINT、INT、BIGINT,它们占用的内存空间分别是 1、2、3、4和 8字节 ,同时它们能表示的数据范围也随着空间的不同而不同。在实际使用中应根据数据的大小范围来选择合适的类型 。 比如存储手机号字段 ,如果开发人员考虑到 varchar占用空间大 ,影响查询性能 ,于是把字段类型由 varchar改成int,结果在录入手机号时发生了溢出 ,因为无符号的int型数据能表示的最大数是4294967295,而手机号是需要11位数字的。在这种情况下,可以考虑把 int类型转换为bigint类型,就不会存在溢出的情况了。 另外有不少开发人员在设计表字段 时 ,只要是针对数值类型的全部用 int.这不一定合适,就比如用户的年龄,一般来说,年龄大都在1—100岁之间,长度只有3,那么用int就不合适了可以用 tinyint代替。又比如,用户在线状态,0表示离线、1表示在线 、2表示离开 、3表示忙碌 、4表示隐身等。其实类似这样的情况,用int都是没有必要的.浪费空间,采用tinyint完全可以满足需要,int占用的是4字节,而tinyint才占用1个字节。
1.2字符类型
  char和varchar是日常使用最多的字符类型。char(N)用于保存固定长度的字符串,长度最大为255。比指定长度大的值将被截短,而比指定长度小的值将会用空格进行填补。varchar(N)用于保存可变长度的字符串.长度最大为65535,只存储字符串实际需要的长度,当然它会增加一个或两个额外字节来存储字符串本身的长度,如果列的最大长度小于或等于255,则使用1字节,否则就使用2字节。同时char和varchar跟字符编码也有密切联系,latin占用1个字节,gbk占用2个字节,utf8占用3个字节。什么情况下用char类型,什么情况下用varchar类型呢?一般来说,经常变化的值,如家庭住址,由于每个人的地址都不同,有的地址很长有的很短,那么用varchar相对比较合适。而对于固定长度的值,比如uuid函数,是数字和字母组成的36位长度的字符类型,长度是固定不变的.或者是md5加密后的32位长度的字符类型,可以设置为char(36)和char(32),这样相比于varchar,还节省空间,因为varchar还要用1字节存储串的长度。有的人会问,既然varchar只存储字符串实际的长度。使用varchar(20)或varchar(100)存储’abc’字节都会一样,那于瞻在设计表时就把值定义得大一些,为今后的扩展先预留出来。对于这个问题,虽然两者存储的空间是一样的,但二者的性能完全不一样,MySQL需要先在内存中分配固定的空间来保存值,这无形中就浪费了内存,而且对表的排序或使用临时表尤其不好,所以只分配真正需要的那部分空间即可。
1.3时间类型
  在MySQL中支持的5个时间类型是DATE、TIME、DATETIME、TIMESTAMP和YEAR,它们分别占用的内存空间是3、3、8、4和l字节。datetime和timestamp都可以精确刮秒,但datetime占用8字节,而timestamp只占用4字节,日常建表时应优先选择timestamp类型。并且timestamp还具有自动更新时间功能。
 
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值