0
点赞
收藏
分享

微信扫一扫

《高性能mysql》之Schema与数据类型优化(第四章)


①简单原则


     更小通常更好、简单就好、尽量避免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)

 标准整数

bigint [(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


一个字节记录长度), 推荐使用,但update时可能使行变得比原来长


          CHAR:定长,对于md5数据合适存储( 较短数据且固定长度)


注:慷慨是不明智, 需要多少分配多少,如手机号11位则分配 11


的字符串数据


               缺点:Innodb中当数据行中有以上两个会使用 磁盘临时表, 解决办法是避免使用该两种类型


 -- 枚举:ENUM把不重复字符串存储成一个预定义集合,例子如下:


          

《高性能mysql》之Schema与数据类型优化(第四章)_字符串


    注:枚举常量尽量避免常量



 -- 日期和时间类型:


          TIMESTAMP:只能表示 1970-2038年,  时间 依赖时区(如中国需要设置为中国时区), 插入时可自动 更新


注:TIMESTAMP效率比DATETIME高


-- 位数据类型:含BIT、SET(具体不做介绍)



 -- 选择标识符:


auto_increment



③MySQL设计中陷阱:


-- 太多的列


-- 太多的关联:每个关联操作最多 61张表,根据经验,若需要执行快并发好,单个查询最好在 12个表内关联


 -- 注意过度使用枚举









举报

相关推荐

mysql第四章总结

第四章

第四章总结

第四章:表

第四章、数组

第四章:Hbase

0 条评论