《高性能mysql》之Schema与数据类型优化(第四章)
2017-03-13 21:08
489 查看
①简单原则
更小通常更好、简单就好、尽量避免NULL
②数据类型选择
-- 整型:尽量使用unsigned(不允许负值),且选择合适大小的整型数据,表如下:
-- 实数:带小数部分数字
如:float(4个字节、11个数字)、double(8个字节,20个数字)、decimal(在mysql5.0以上允许65个数字)
注:如计算精确数字,使用decimal(像财务)
-- 字符串类型:VARCHAR和CHAR
VARCHAR:可变长字符串,比定长省空间(需一个字节记录长度),推荐使用,但update时可能使行变得比原来长
CHAR:定长,对于md5数据合适存储(较短数据且固定长度)
注:慷慨是不明智,需要多少分配多少,如手机号11位则分配 11
BLOB和TEXT:常用存储大的字符串数据
缺点:Innodb中当数据行中有以上两个会使用磁盘临时表,解决办法是避免使用该两种类型
-- 枚举:ENUM把不重复字符串存储成一个预定义集合,例子如下:
注:枚举常量尽量避免常量
-- 日期和时间类型:
TIMESTAMP:只能表示1970-2038年, 时间依赖时区(如中国需要设置为中国时区),插入时可自动更新
注:TIMESTAMP效率比DATETIME高
-- 位数据类型:含BIT、SET(具体不做介绍)
-- 选择标识符:
整数一般是标识列最好的选择,可用auto_increment
③MySQL设计中陷阱:
-- 太多的列
-- 太多的关联:每个关联操作最多61张表,根据经验,若需要执行快并发好,单个查询最好在12个表内关联
--
注意过度使用枚举
更小通常更好、简单就好、尽量避免NULL
②数据类型选择
-- 整型:尽量使用unsigned(不允许负值),且选择合适大小的整型数据,表如下:
数据类型 | 大小 | M (默认值) | 范围(有符号) | 范围(无符号) | 用途 |
tinyint [(M)] [UNSIGNED] [ZEROFILL] | 1字节 | 4 | -128~127 (-27~27-1) | 0 ~ 255 (0 ~ 28-1) | 非常小整数值 |
smallint [(M)] [UNSIGNED] [ZEROFILL] | 2字节 | 6 | -32768~32767(-215 ~ 215-1) | 0 ~ 65535 (0 ~ 216-1) | 较小整数 |
mediumint [(M)] [UNSIGNED] [ZEROFILL] | 3字节 | 9 | -8388608 ~ 8388607 (-223 ~ 223-1) | 0 ~ 16777215 (0 ~ 224-1) | 中等大小整数 |
int [(M)] [UNSIGNED] [ZEROFILL] | 4字节 | 11 | -2147483648 ~ 2147483647(-231 ~ 231-1) | 0 ~ 4294967295 (0 ~ 232-1) | 标准整数 |
[b]bigint[/b] [(M)] [UNSIGNED] [ZEROFILL] | 8字节 | 20 | -9223372036854775808 ~9223372036854775807 (-263 ~ 263-1) | 0 ~ 18446744073709551615 (0 ~ 264-1) | 较大整数 |
如:float(4个字节、11个数字)、double(8个字节,20个数字)、decimal(在mysql5.0以上允许65个数字)
注:如计算精确数字,使用decimal(像财务)
-- 字符串类型:VARCHAR和CHAR
VARCHAR:可变长字符串,比定长省空间(需一个字节记录长度),推荐使用,但update时可能使行变得比原来长
CHAR:定长,对于md5数据合适存储(较短数据且固定长度)
注:慷慨是不明智,需要多少分配多少,如手机号11位则分配 11
BLOB和TEXT:常用存储大的字符串数据
缺点:Innodb中当数据行中有以上两个会使用磁盘临时表,解决办法是避免使用该两种类型
-- 枚举:ENUM把不重复字符串存储成一个预定义集合,例子如下:
注:枚举常量尽量避免常量
-- 日期和时间类型:
TIMESTAMP:只能表示1970-2038年, 时间依赖时区(如中国需要设置为中国时区),插入时可自动更新
注:TIMESTAMP效率比DATETIME高
-- 位数据类型:含BIT、SET(具体不做介绍)
-- 选择标识符:
整数一般是标识列最好的选择,可用auto_increment
③MySQL设计中陷阱:
-- 太多的列
-- 太多的关联:每个关联操作最多61张表,根据经验,若需要执行快并发好,单个查询最好在12个表内关联
--
注意过度使用枚举
相关文章推荐
- 【MySQL】《高性能MySQL》学习笔记,第四章,Schema与数据类型优化
- 《高性能MySQL》读书笔记--Schema与数据类型优化
- [转]《高性能MySQL》读书笔记--Schema与数据类型优化
- 高性能Mysql——Schema与数据类型优化
- 《高性能MySQL》读书笔记--Schema与数据类型优化
- 《高性能MySQL》读书笔记--Schema与数据类型优化
- 高性能MySQL(四)—Schema与数据类型优化(2)
- 高性能Mysql阅读笔记-第四章Schema与数据类型优化
- 【高性能MySQL】读书摘录3-第四章、Schema与数据类型优化
- 高性能MYSQL读书要点摘录_3_Schema与数据类型优化
- Schema与数据类型优化
- 谈谈Mysql之Schema和数据类型优化
- 数据库与数据类型优化——《高性能Mysql》学习笔记1
- mysql Schema与数据类型优化
- 【读书笔记】【MySQL高性能】Schema与数据类型优化
- 高性能MySQL(四)—Schema与数据类型优化(1)
- MySQL——Schema与数据类型优化(一)
- Schema与数据类型优化
- 《高性能MySQL》笔记-选择优化的数据类型
- Schema与数据类型优化