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. Spring企业级程序设计 • 【目录】

    章节 内容 实践练习 Spring企业级程序设计目录(作业笔记) 第1章 Spring企业级程序设计 • [第1章 Spring之旅] 第2章 Spring企业级程序设计 • [第2章 Spring ...

  2. 开源社区合入patch的步骤

    以Ranger项目为例,说明开源社区合入patch的详细步骤. 1.reviews页面下载patch 进入到review页面:https://reviews.apache.org/r/67919/ 点 ...

  3. Python 元类实现ORM

    ORM概念 ORM(Object Ralational Mapping,对象关系映射)用来把对象模型表示的对象映射到基于 SQL  的关系模型数据库结构中去.这样,我们在具体的操作实体对象的时候,就不 ...

  4. antd递归渲染左侧菜单

  5. react组件性能优化PureComponent

    首先我们使用react组件会配合connect来连接store获取state,那么只要store中的state发生改变组件就会重新渲染,所以性能不高,一般我们可以使用shouldComponentUp ...

  6. Go语言系列之依赖管理

    依赖管理 为什么需要依赖管理? 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个版本的代码.如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解 ...

  7. vue中使用window.resize并去抖动优化

    this.clientWidth = document.documentElement.clientWidth window.onresize = () => { this.clientWidt ...

  8. 简单的Dos 命令

    1.1.如何操作DOS命令 开始---运行---输入cmd--回车 或者 Win + R ---运行---输入cmd--回车 1.2.基本命令 1. 命令:color f0 帮助:color ? 作用 ...

  9. 【Java常用类】SimpleDateFormat

    文章目录 SimpleDateFormat 默认构造器实例化对象 默认构造器的格式化 带参构造器实例化对象 带参构造器的格式化 自定义格式 解析 SimpleDateFormat 默认构造器实例化对象 ...

  10. Docker入门篇(一)安装docker

    Docker入门篇(一)安装docker Docker的来源 由dotCloud公司首创及正式命名,但是企业规模小,影响力不够,所以在快要坚持不住的时候,开始吃百家饭--开源了.不开则已,一开惊人.越 ...