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:           [email protected]

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 、即使它比较调皮、例如和时区相关

时间: 2024-10-27 05:04:47

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

Mysql 数据类型及选择原则

MySQL中的数据类型大的方面来分,可以分为:日期和时间.数值,以及字符串.下面就分开来进行总结. 数据库类型的选择对数据库的性能影响很大 1 . 数据类型会影响存储空间的开销 2 . 数据类型会影响数据查询性能 日期和时间数据类型 MySQL数据类型 含义 date 3字节,日期,格式:2014-09-18 time 3字节,时间,格式:08:42:30 datetime 8字节,日期时间,格式:2014-09-18 08:42:30 timestamp 4字节,自动存储记录修改的时间 yea

mysql修行练级之字符集,数据类型与存储引擎选择

如何选择合适的存储引擎 几个常用存储引擎的特点 下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式. 特点 Myisam BDB Memory InnoDB Archive 存储限制 没有 没有 有 64TB 没有 事务安全 支持 支持 锁机制 表锁 页锁 表锁 行锁 行锁 B树索引 支持 支持 支持 支持 哈希索引 支持 支持 全文索引 支持 集群索引 支持 数据缓存 支持 支持 索引缓存 支持 支持 支持 数据可压缩 支持 支持 空间使用 低 低 N/A 高 非常低

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

前言: 最近在看高性能 MySQL,记录写学习笔记: 高性能 MySQL 学习笔记(二) Schema与数据类型优化 笔记核心内容:MySQL 如何选择正确的数据类型,各数据类型的差异: // 不要小看 MySQL 数据类型对性能的重要性, 当你的系统体量到达一定程度时,就知道这里的性能差异了. 一.选择优化的数据类型 // 更小的通常越好 尽量选择使用可以正确存储数据的最小数据类型.更小的数据类型通常更快, 因为它们占用更少的磁盘.内存和 CPU 缓存,并且处理时需要的 CPU 周期也更少:

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

前言 这篇是MySQL 数据库规范的最后一篇--调优篇,旨在提供我们发现系统性能变弱.MySQL系统参数调优,SQL脚本出现问题的精准定位与调优方法. 目录 1.MySQL 调优金字塔理论 2.MySQL 慢查询分析--mysqldumpslow.pt_query_digest工具的使用(SQL脚本层面) 3.选择合适的数据类型 4.去除无用的索引--pt_duplicate_key_checker工具的使用(索引层面) 5.反范式化设计(表结构) 6.垂直水平分表 7.MySQL 重要参数调优

跟王老师学MySQL:MySQL数据类型之小数类型

跟王老师学MySQL:MySQL数据类型之小数类型 主讲教师:王少华   QQ群号:483773664 学习内容 小数类型有哪些以及它们的取值范围 定义语法中的M和D的含义 定点型和浮点型的区别 一.简介 MySQL中使用浮点数类型和定点数类型来表示小数. 浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型). 定点数类型就是DECIMAL型. 二.字节数.取值范围 三.定义语法 1 类据类型 (M,D) M:精度,数据的总长度 D:标度,小数点后的长度 注: 小数点不占长

跟王老师学MySQL:MySQL数据类型常见问题及解答

跟王老师学MySQL:MySQL数据类型常见问题及解答 主讲教师:王少华   QQ群号:483773664 学习内容 整数类型和浮点类型的异同 浮点数类型和定点数类型的异同 char和varchar类型的异同 时间和日期类型的异同 text和blob的异同 存储路径字符串的注意事项 mysql如何存储boolean类型 null的处理 在MySQL中创建表时,需要考虑为字段选择哪种数据类型是最合适的.选择了合适的数据类型,会提高数据库的效率. 一.整数类型和浮点类型 整数类型和浮点类型最大区别是

21分钟 MySQL 入门教程 && mysql数据类型

转自:http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#c1 http://www.cnblogs.com/zbseoag/archive/2013/03/19/2970004.html 21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据类型 五.使用MySQL数据库 登录

DF学Mysql(三)——Mysql数据类型

Mysql数据类型分为:整数类型.浮点数类型.定点数类型日期与时间类型字符串类型二进制类型 整数类型 字节数 无符号数取值范围 有符号数取值范围TINYINT 1 0-255 -128-127SMALLINT 2 0-65535 -32768-32767MEDIUMINT 3 0-16777215 -8388608-8388607INT 4 0-4294967295 -2147483648-2147483647INTGER 4 0-4294967295 -2147483648-214748364

MySQL 数据类型 详解

MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补. 1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3个字节 范围(-8388608~83