1:前言

    mysql支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。

2:几个原则

  • 更小的通常更好---满足存储需要的情况下使用最小的数据类型,因为占用更小的磁盘,内存和cpu缓存,并且处理需要的cpu周期也更少。举个例子:我们经常使用status 为 0,1 表示状态,这里使用TINYINT(-128-127)类型已经足够,不必使用int。
  • 简单就好---简单数据类型的操作通常需要使用更小的CPU周期,整型比字符操作代价更低。
  • 尽量避免Null--- 以前我们表中包含很多为NULL的列,即使不需要保存Null,通常情况下最好指定为Not NULL,除非真的需要。原因:1:优化需要,对于查询包含为NULL的列,会使索引,索引统计和值比较复杂,NULL会使用更多的存储空间,当NULL列被索引时需要一个额外的字节。2:程序问题,如果你domain中的变量没有定义成包装类,查询时不能将NULL保存到数据。所以这里同时建议程序中使用Integer 代替 int 在domain中。

3:整数类型

  mysql支持一下几种类型整数:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分别8,16,24,32,64为存储空间,范围-2(N-1)-2(N-1)-1,其中N是存储空间的位数。
   整数还有UNSINGED属性,表示不允许负值,可以使正数的上限提高一倍,但是存储空间一样,性能一样。
   整数计算一般使用64位BIGINT整数,所以在代码中接收类似count(id)的结果时,要定义成BigInteger,不然会报错,
   对于存储和计算来说,INT(1)和INT(20)是一样的。

4:实体类型

   实体是带有小数部分的数字。我们不仅可以用与存储小数部分,还可以使用DECIMAL存储比BIGINT(能表示20位,18..)还大的整数。之前看到公司老系统中使用DECIMAL来表示数字类型一直不明白,可能存在这个原因。
     在需要对小数进行精确计算时,才使用DECIMAL来表示(mysql5.0以上)

5:字符串类型

  varchar和char在不同的存储引擎中存储方式不一样。

varchar

   varchar类型用于存储可变长字符串,比定长类型更节省空间,它仅使用必要的空间,如varchar(20) "abc" 仅使用3个字节,但是它会再拿出1或2个字节来记录字符串长度(大于255字节为2个),存储时会保留末尾空格,对于varchar来说最好的策略是只分配真正需要的空间。

使用情况:如果字符串列的最大长度比平均长度大很多;列的更新很少,所以碎片不是问题;使用了UTF-8这样的复杂字符集。

Char

    char 类型是定长,会删除所有的末尾空格,会根据需要采用空格进行填充以方便比较。
使用情况:适合存储很短的字符串,或者所有值都接近一个长度,比如char 非常适合存储密码的MD5值,因为他是一个定长。我们可以使用char(1) 来存储只有Y和N的值,它只需要一个字节,而如果使用varchar(1)会占用两个字节。对于经常改变的数据,char也更好。

6:日期和时间类型

datetime
能保存大范围的值,从1001-9999年,精度为秒,格式YYYYMMDDHHMMSS的整数中,和时区无关
     

timestamp

 保存了从1970年1月1日午夜的秒数,到2038年,显示的值和时区有关系。

《高性能MySQL》之选择优化的数据类型相关推荐

  1. 高性能MySQL——查询性能优化

    在数据库设计中,如果查询写得很糟糕,即使库表结构设计再合理,索引再合理也无法实现高性能. 1.优化数据访问 查询性能低下最基本的原因是访问的数据太多.对于低效的查询,通过以下两步来分析总是很有效: 确 ...

  2. 高性能MySQL -- 查询性能优化

    一般来说一个好的程序:查询优化,索引优化,库表结构要同时进行优化.今天我们来讲一下查询优化. 我们需要对MySQL的架构有基本认知,所以这里贴一张图大家看看: 图片来自于<小林coding> ...

  3. 高性能MySQL(2)——Schema与数据类型的优化

    良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询语句来设计 schema,这往往需要权衡各种因素. 一.选择优化的数据类型 MySQL支持的数据类型非常多,选择正确的数据类型对于获得 ...

  4. 《高性能MySQL》阅读-MySQL选择数据类型

    二. Schema与数据类型优化 20210112 02:30-03:40整理 [素还真]诗号: 半神半圣亦半仙,全儒全道是全贤: 脑中真书藏万卷,掌握文武半边天. 选择优化的数据类型 选择原则: ① ...

  5. mysql表设计很多非常大的varchar_聊一聊数据库(MySQL)设计中的数据类型优化

    良好的逻辑设计和物理设计事高性能的基石,在进行数据库设计时,我们应该要考虑到未来将会执行的查询语句,这就需要对各种因素进行权衡.本文将会聊一聊数据库(MySQL)设计中有关数据类型优化的一些内容.以下 ...

  6. 高性能MySQL(第二版)第三章 架构优化和索引(上)——读书笔记

    一,选择优化的数据类型 更小通常更好 更小的数据类型使用了更少的磁盘,内存和CPU缓存 但是要确保不要低估需要保存的值,在架构中的多个地方增加数据类型的范围是一件极其费时费力的工作.如果不确定需要什么 ...

  7. MySQL各种优化基于《高性能MySQL第三版》

    [TOC] MySQL各种优化 查询优化 查询优化器模块 查询优化器的任务是发现执行 SQL 查询的最佳方案.大多数查询优化器,要么基于规则.要么基于成本. 大多数查询优化器,包含 MySQL 的查询 ...

  8. 高性能mysql_「高性能MySQL」十年阿里架构师推荐,这份高性能MySQL文档送给你

    MySQL MySQL的概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方 ...

  9. 高性能mysql知识总结大全

    高性能mysql知识总结大全 vii 目录 Contents 推荐序- I 前言- III 第 1 章 MySQL 架构- 1 1.1 MySQL 的逻辑架构 - 1 1.2 并发控制 - 3 1.3 ...

  10. 高性能MySQL(第3版)(MySQL旗舰名著 惊献全面升级)

    高性能MySQL(第3版)(MySQL旗舰名著  惊献全面升级) [美]施瓦茨(Schwartz,B.)[美]扎伊采夫(Zaitsev,P.) [美]特卡琴科(Tkachenko,V.) 著 宁海元 ...

最新文章

  1. 用Python分析北上广深租房情况,租房时优先考虑哪些因素?
  2. mkdir命令使用详解
  3. NYOJ 108士兵杀敌(一)
  4. SAP-HR三大结构
  5. html兄弟选择器怎么用,CSS的相邻兄弟选择器用法示例讲解
  6. ITK:图像的区域最大值
  7. .md是什么文件_Element-UI源码阅读之md显示到页面
  8. centos7已有数据硬盘挂载_干货!如何给虚拟机增加虚拟硬盘,Linux再分区挂载
  9. Java番外篇4——BigInteger与BigDecimal
  10. Mr.J--C语言头函数的建立(附严薇敏《数据结构》线性表代码)
  11. Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数...
  12. 【Siddhi】Siddhi的语法关键字
  13. 由于3²+4²=5²,所以称‘3,4,5‘为勾股数,求n(包括n)以内所有勾股数数组。
  14. 在Linux上安装ant环境
  15. ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️
  16. IT人 不要一辈子靠技术生存(转
  17. 海康威视摄像头忘记密码后如何重置
  18. CF896C Willem, Chtholly and Seniorious(珂朵莉树)
  19. 1.1 极限的概念【极限】
  20. 10种食物 让你快乐每一天

热门文章

  1. 软件质量管理体系-ISO 9000
  2. EasyUI-基本框架
  3. 微信公众号根据URL取文章详情 API 返回值说明
  4. dos2unix离线安装
  5. 计算机abcd地址,IP地址ABCDE的分类说明
  6. excel内容合并脚本
  7. 计算机485通讯原理,用RS-485设计的多机通信接口电路
  8. 测试开发面试-技术题持续累积
  9. 打印服务器自动关闭,win7打印机服务print spooler老是自动关闭怎么解决
  10. VLFeat工具箱配置