MySQL优化

MySQL性能优化

  • 主要针对InnoDB,本文主要是依赖于《高性能MySQL》

字段选择

  • 在建表的时候,如果业务没有特别要求,每个字段要避免为空,为空的列需要占用更多的存储空间,MySQL也需要进行特殊处理,当可以为空的列作为索引的时候,每个索引记录需要一个额外的存储空间,在MyISAM中甚至会导致固定长度的索引变为可变长的索引,这是非常危险的,并且为空,会导致索引失效,如果字段可以为空,那么在查询的时候就会想用!=或者is not null ,这会导致索引失效(亲测)。但是,并不意味着,将表的字段改为不为空就会提升性能,这对性能的提升不是很大, 要想提升性能,还是要依赖建立优质的索引等方法,只有在不得已的情况下,才进行将 NULL改为NOT NULL,并且对于大表,改变表的定义,这是非常耗时的(后面会讲到)。当然,对于InnoDB,该引擎使用单独的bit来存储NULL值,这对稀疏矩阵有很高的空间效率,但不适用于MyISAM(这来自于《高性能MySQL》,本人不是很明白,希望有懂的人解释一下)

字符串类型

  • 对于字符串类型,MySQL有varchar char等类型,在开发中,首选varcharvarchar用来储存不定长的字符串,而char是定长的字符串,也就是说varchar只会占用必要的存储空间,但是char,无论是多长的字符串,都是一样的存储空间,这会造成空间浪费。
  • varchar需要额外的1或者2个字节来记录字符串的长度:
    • 如果列的最大长度小于或者等于255,那么就只需要1个额外字节,否则使用2个字节,比如:在latin1字符集中,varchar(10)的列占用11个字节,varchar(1000)的列占用1002个字节
  • 在5.0以上的版本中,MySQL在存储和检索的时候会保留末尾空格,在低版本中,会剔除掉末尾空格。但是,即使是高版本的MySQL,对于char类型,依然会删除掉末尾的空格,但varchar不是。
  • 由于char是存储定长的,那么就适合存储那些长度较为统一,尤其是MD5,对于表中大多数的数据都是很短的情况下,请使用char
  • InnoDB中,过长的varchar会存储成BLOB

时间类型

  • 千万不要用字符串来存储时间,这是非常愚蠢的行为,只有入门程序员才会这么做

  • DATATIME

  • 这个类型能存储大范围的时间,从1001到9999年,精确到秒,存储到格式为YYYYMMDDHHMMSS的整数中,这个类型的时间与时区是无关的,使用8个字节来存储。

  • 未完待续…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值