MySQL数据优化

1. 数据类型优化

  1. 更小的通常更好。占用更小的磁盘、内存和cpu缓存
  2. 简单就好。整型比字符串操作代价更低,因为字符集和校对规则字符串比整型更复杂;使用mysql自建类型而不是字符串存储日期
  3. 尽量避免null。查询中包含null的列,对mysql来说很难优化。
    • https://www.cnblogs.com/balfish/p/7905100.html
    • NULL值到非NULL的更新无法做到原地更新,更容易发生索引分裂,从而影响性能。
    • NOT IN、!= 等负向条件查询在有 NULL 值的情况下返回永远为空结果,查询容易出错
1.1 实际细则
1.1.1 整数类型

TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT分别使用8,16,24,32,64位存储空间。 (一个字节是8位)

1.1.2 字符串类型
  1. varchar(根据内容实际长度保存数据)
    • varchar(n) n小于等于255使用额外一个字节保存长度,n>255使用额外两个字节保存长度。
    • varchar(5)与varchar(255)保存同样的内容,硬盘存储空间相同,但内存空间占用不同,是指定的大小(比如将行从存储引擎层复制到SQL层时,VARCHAR将转换字段CHAR以获得利用固定宽度行的优势。因此,内存中的字符串将填充到声明的VARCHAR列的最大长度)
  2. 使用场景
    • 字符串更新少的,每次更新都要重新计算,使用额外的空间保存长度
    • 保存多字节字符,如汉子,特殊字符等
    • 存储长度波动大的数据
1.1.3 字符类型
  1. 最大长度255
  2. 自动删除掉末尾空格
  3. 检索效率、写效率比varchar高,以空间换时间
  4. 场景
    • 存储长度波动不大
    • 存储短字符串,经常更新的字符串
1.1.4 datetime类型(不推荐使用,暂用空间大,日期函数也不能用)
  1. 占用8个字节
  2. 与时区无关,数据库底层时区配置对datetime无效
  3. 可保存到毫秒;可保存的范围大,
1.1.5 timestamp类型
  1. 占用4个字节
  2. 时间范围:1970-01-01到2038-01-19
  3. 精确到秒
  4. 采用整型存储
  5. 依赖时区设置(自动更新timestamp的值)
1.1.6 date类型
  1. 占用3个字节
  2. 可以是日期函数
  3. 保存1000-01-01到9999-12-31之间的日期
1.1.7 枚举类型

有时可以使用枚举类代替常用的字符串类型,mysql存储枚举类型会非常紧凑,会根据列表值的数据压缩到一个或两个字节中,
mysql在内部会将每个值在列表中的位置保存为整数,并且在表的.frm文件中保存“数字-字符串”映射关系的查找表
备注:添加新值需要重新构建整个表,这可能需要花费数小时,具体取决于表的大小

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值