MySQL数据类型的最优选择
 
慎重选择数据类型很重要、为啥哩?可以提高性能、原理如下:
     
     ● 存储(内存、磁盘)、从而节省I/O(检索相同数据情况下)
     ● 计算、进而减负CPU负载
     
     数据类型总体可分三种:数字、字符和时期
     
     ㈠ 数字
     
        ① 分类
 
 
        ② 为整数类型指定宽度没啥意义、硬说呢、大概也是为了显示字符的个数、人性化点
           因为、对于存储和计算而言、INT(1)和INT(100)是相同的
           
        ③ 对于浮点、建议只指定数据类型、而不要指定精度
        
        ④ 对于定点、尽量只在对小数精确计算时才使用、如存储财务数据
           但天朝某些财务软件在其数据库内使用float作为工资类型
           赤裸裸的资本家的丑恶展现、鄙视!!!
           
        ⑤ 在数据量较大时、建议把实数类型转为整数类型
           原因很简单:
             ● 浮点不精确
             ● 定点计算代价昂贵
           例如:
           要存放财务数据精确到万分之一、则可以把所有金额乘以一百万、然后存在BIGINT下
 
     ㈡ 字符串
 
        ① 分类
          
 
        ② 数据如何存储取决于存储引擎
           char和varchar在不同引擎在内存和磁盘可能是不一样的
           不过、对于char、在填充和截取上是一样的、因为、
           这部分是在Server层完成的
           
        ③ 常见 char 使用场景
           
           ● 很短的字符串或所有值都接近同一个长度、如存储密码的MD5
           ● 经常变更的列、因为char产生的碎片少
           ● 非常短的列、如性别、char(1)的效率更好、毕竟varchar(1)浪费了1一个字节
           
        ④ 和字符集的那点猫腻
           
           CSDN 有个讨论非常热的帖子:有人认为unicode跟utf-8是等同的吗? 点击看讨论贴
           我赶脚、这其实没啥好讨论的、因为、这两个根本就是两回事
           Unicode 是字符编码
           utf8 是字符集
           
           对Unicode编码的字符集、墙裂建议使用varchar 
           显然、utf8 也是Unicode 编码的、而且、随着国际化趋势、utf8 是首选
           那么、结果是、在char 和 varchar 竞争里、varchar 便是最大赢家
           
           可通过下列方法查看MySQL Unicode支持的字符集以及当前的字符集
[plain] 
mysql> select CHARACTER_SET_NAME from character_sets   
    ->  where DESCRIPTION like '%Unicode%'\G;  
*************************** 1. row ***************************  
CHARACTER_SET_NAME: utf8  
*************************** 2. row ***************************  
CHARACTER_SET_NAME: ucs2  
*************************** 3. row ***************************  
CHARACTER_SET_NAME: utf8mb4  
*************************** 4. row ***************************  
CHARACTER_SET_NAME: utf16  
*************************** 5. row ***************************  
CHARACTER_SET_NAME: utf32  
5 rows in set (0.06 sec)  
 
mysql> status;  
--------------  
mysql  Ver 14.14 Distrib 5.5.16, for Linux (i686) using  EditLine wrapper  
  
Connection id:          1  
Current database:       information_schema  
Current user:           root@localhost  
SSL:                    Not in use  
Current pager:          stdout  
Using outfile:          ''  
Using delimiter:        ;  
Server version:         5.5.16-log Source distribution  
Protocol version:       10  
Connection:             Localhost via UNIX socket  
Server characterset:    latin1  
Db     characterset:    utf8  
Client characterset:    utf8  
Conn.  characterset:    utf8  
UNIX socket:            /tmp/mysql.sock  
Uptime:                 2 min 9 sec  
     
        ⑤ 对于InnoDB 建议使用varchar
           现在很多场合都使用了InnoDB、算下来、varchar 又赢了
           
        ⑥ 存储大数据
           
           ● BLOB:采用二进制存储、没有字符集或排序规则
           ● TEXT:采用字符方式存储、有字符集和排序规则
           
           最好尽量避免使用这两、如果可以、可以把BLOB货TEXT 列分离成单独的表
           
           对于使用了BLOB或TEXT大量删除或更新时、
           建议定期使用 optimize table 碎片整理 
           
     ㈢ 日期和时间类型
        
        常见的有 datatime、timestamp 和 date
        从存储上看、timestamp 占 4 个字节、其他两个 8 个字节
        所以、若无意外、最好尽量使用 timestamp 、即使它比较调皮、例如和时区相关

MySQL数据类型的最优选择的更多相关文章

  1. 谈谈如何选择合适的MySQL数据类型

    MySQL数据类型选择 一 .选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更 ...

  2. MySQL数据类型的选择

    +++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据类型的选择时间:2019年2月22日内容:MySQL数据类型的选择范式参考重点:主要讲述MyS ...

  3. Mysql 数据类型及选择原则

    MySQL中的数据类型大的方面来分,可以分为:日期和时间.数值,以及字符串.下面就分开来进行总结. 数据库类型的选择对数据库的性能影响很大 1 . 数据类型会影响存储空间的开销 2 . 数据类型会影响 ...

  4. 如何选择合适的MySQL数据类型

    一.MySQL数据类型选择原则 更小的通常更好:一般情况下选择可以正确存储数据的最小数据类型.越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小. 简单就好:简单的数据类型的操作通常需要更少的CP ...

  5. MySQL 基础数据类型优化(如何选择数据类型)

    前言:      最近在看高性能 MySQL,记录写学习笔记:           高性能 MySQL 学习笔记(二) Schema与数据类型优化      笔记核心内容:MySQL 如何选择正确的数 ...

  6. MySQL 数据库规范--调优篇(终结篇)

    前言 这篇是MySQL 数据库规范的最后一篇--调优篇,旨在提供我们发现系统性能变弱.MySQL系统参数调优,SQL脚本出现问题的精准定位与调优方法. 目录 1.MySQL 调优金字塔理论 2.MyS ...

  7. mysql 数据类型

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) ...

  8. MySQL 数据类型 详解

    MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My ...

  9. MySQL数据类型——数值类型

    1.1.1 整型 整型 占用字节 范围 范围 tinyint 1 -27~27-1 -128~127 smallint 2 -215~215-1 -32768~32767 mediumint 3 -2 ...

随机推荐

  1. Android 常见对话框的简单使用(提示信息对话框、单选多选对话框、自定义对话框)

    目录 一.提示信息对话框: 二.单选对话框: 三.多选对话框: 四.自定义对话框: 演示项目完整代码: 一.提示信息对话框: //显示提示消息对话框 private void showMsgDialo ...

  2. Java中常见的转义字符

    转移字符对应的英文是escape character  , 转义字符串(Escape Sequence)字母前面加上捺斜线"\"来表示常见的那些不能显示的ASCII字符.称为转义字 ...

  3. Unity——卡通渲染实现

    效果展示: 原模型: 一.简单分析 卡通渲染又叫非真实渲染(None-Physical Rendering-NPR),一般日漫里的卡通风格有几个特点: 1.人物有描边 2.有明显的阴影分界线,没有太平 ...

  4. 【工控老马】OPC通讯协议解析-OPC七问

    1 通讯步骤 1.1 第一问 OPC Client和OPC Server之间通讯谁是主动的? 答:当然是OPC Client. 1.2 第二问 OPC Client第一次动作做了什么? 答:从大多数O ...

  5. Swoole 中使用 UDP 异步服务器、UDP 同步客户端、UDP 协程客户端

    UDP 异步风格服务器 # udp_server.php // 创建 UDP 服务器对象,监听0.0.0.0:9502端口,类型为SWOOLE_SOCK_UDP $serv = new Swoole\ ...

  6. 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...

  7. Flask_cookie和session(五)

    一.cookie和session介绍 cookie 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现 ...

  8. js 对 date 和 字符串 类型的正确互换【各浏览器兼容】,解决invalid Date

    1.前言 有个需求,想要把指定日期时间的字符串转换成date类型 pc浏览器正常转换,但手机浏览器 返回结果是 invalid Date [无效的日期] 2.原因 出现这样不兼容的原因其实很简单, p ...

  9. react中使用react-transition-group(CSSTransition)

    https://blog.csdn.net/sophie_u/article/details/80093876

  10. JVM调优2-远程监控

    监控远程JVM VisualJVM不仅是可以监控本地jvm进程,还可以监控远程的jvm进程,需要借助于JMX技术实现. 什么是JMX JMX(Java Management Extensions,即J ...