码迷,mamicode.com
首页 > 其他好文 > 详细

表的优化与列类型选择

时间:2018-02-28 01:06:12      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:sig   选择   ext   空间换时间   gpo   优先   存储   无法   内存   

1. 表的优化

1.1. 定长与变长分离

id int, 4个字节, char(4) 4个字符长度,也是定长, time

即每一单元值占的字节是固定的.

核心且常用字段,宜建成定长,放在一张表.

 

varchar, text,blob,这种变长字段,适合单放一张表, 用主键与核心表关联起来.

1.2. 常用字段和不常用字段要分离.

需要结合网站具体的业务来分析,分析字段的查询场景,查询频度低的字段,单拆出来.

1.3. 合理添加冗余字段.

典型的”空间换时间”

2.列选择原则

2.1. 字段类型优先级 整型 > date,time > enum,char>varchar > blob

列的特点分析:

整型: 定长,没有国家/地区之分,没有字符集的差异

time定长,运算快,节省空间. 考虑时区,sql时不方便 where > ‘2005-10-12’;

enum: 能起来约束值的目的, 内部用整型来存储,但与char联查时,内部要经历串与值的转化

Char 定长, 考虑字符集和(排序)校对集

varchar, 不定长 要考虑字符集的转换与排序时的校对集,速度慢.

text/Blob 无法使用内存临时表

2.2. 够用就行,不要慷慨 (smallint,varchar(N))

原因: 大的字段浪费内存,影响速度,

以年龄为例 tinyint unsigned not null ,可以存储255,足够. int浪费了3个字节

varchar(10) ,varchar(300)存储的内容相同, 但在表联查时,varchar(300)要花更多内存

2.3. 尽量避免用NULL()

原因: NULL不利于索引,要用特殊的字节来标注.

在磁盘上占据的空间其实更大.

2.4. Enum列的说明

1: enum列在内部是用整型来储存的

2: enum列与enum列相关联速度最快

3: enum列比(var)char 的弱势---在碰到与char关联时,要转化. 要花时间.

 

优势在于,char非常长时,enum依然是整型固定长度.

当查询的数据量越大时,enum的优势越明显.

 

enumchar/varchar关联 ,因为要转化,速度要比enum->enum,char->char要慢,

但有时也这样用-----就是在数据量特别大时,可以节省IO.

 

原因----无论enum(‘manmaman’,’womanwomanwoman’) 枚举的字符多长,内部都是用整型表示, 在内存中产生的数据大小不变,char,却在内存中产生的数据越来越多.

 

总结: enum enum类型关联速度比较快,Enum 类型节省了IO

表的优化与列类型选择

标签:sig   选择   ext   空间换时间   gpo   优先   存储   无法   内存   

原文地址:https://www.cnblogs.com/aaron911/p/8370604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!