ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL数据类型优化注意事项

2020-06-14 22:54:04  阅读:252  来源: 互联网

标签:存储 VARCHAR 字节 DECIMAL MySQL 数据类型 CHAR 注意事项 CPU


这两天正在看高性能MySQL,对于当前知识的一个完善,所以只是一些零星的知识点,并不是系统的总结,希望对看到的朋友有所帮助,一起成长!

1.更小的通常更好

 尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它占用更少的磁盘、内存和CPU缓存,处理时需要的CPU周期也更少
2.简单就好
    简单的类型需要更少的CPU周期,比如:整型比字符操作代价更低,因为字符集和校对规则是字符比较比整型比较更复杂
3.尽量避免NULL
    可为NULL的列使得索引,索引统计和值比较更复杂
    可为null的列会使用更多的存储空间,在mysql里也需要特殊处理
    可为null的列被索引时,每个索引记录需要一个额外的字节
    如果计划在字段上建立索引,尽量避免设计成可为null的列
    当然也有例外,对于稀疏数据有很好的空间效率,但不适用MyISAM(稀疏数据:只有少数的列为非null值,其他大部分数据都为NULL值)

整数和实数类型
    DECIMAL用于存储精确的小数(该字段慎用,除非必要)
    CPU不支持对DECIMAL的直接计算,MySQL服务器自身实现了DECIMAL的高精度计算,因为需要额外的空间和开销,应尽量只在对小数进行精确计算时使用DECIMAL
    CPU直接支持原生的浮点计算,所以浮点运算明显很快(FLOAT, DOUBLE)

    也可以使用BIGINT替代DECIMAL,将对应的值的小数位乘以相应的倍数

VARCHAR和CHAR类型
  VARCHAR类型用于存储可变长字符串,它比定长类型更节省空间,因为它仅使用必要的空间,一般需要1或2个额外的字节记录字符串的长度
  使用场景

    1.字符串的列的最大长度比平均长度大很多,
    2.列更新的少,所以碎片不是问题(如果行是变长的话,在update时可能使行变得比原来更长,这就需要做额外的工作)
    3.使用了像UTF-8这样复杂的字符集,每个字符都是用不同的字节数进行存储

  CHAR类型是定长
  使用场景

    适合存储很短的字符串,或者所有值都接近同一个长度,例如:存储密码的MD5值,这是一个定长值
    对于经常变更的数据,因为定长的CHAR类型不容易产生碎片
    对于非常短的列,CHAR比VARCHAR在存储空间上更有效率,例如长度为1的列,CHAR需要一个字节,而VARCHAR却需要两个字节,因为还需要一个字节记录长度

标签:存储,VARCHAR,字节,DECIMAL,MySQL,数据类型,CHAR,注意事项,CPU
来源: https://www.cnblogs.com/wllit/p/13127521.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有