mysql查询优化2:列选择原则

1、字段类型选择优先级:整型 > date,time > enum ,char >varchar >blob,text

2、列的特点分析

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

如:tinyint 1,2,3,4,5  <---> char(1) a,b,c,d,e

从空间上都是占1个字节,但是order by排序时,tinyint快,原因时是:因为char类型需要考虑字符集和校对集

time :定长,运算快,节省空间,如果考虑时区写sql时不方便

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

char :定长,要考虑字符集和校对集

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

text /blob : 可存储较大的数据,但无法使用内存临时表(排序等操作只能在磁盘上进行)

## 关于date/time 的选择,建议用int unsigned not null 来存储时间戳

## 指定数据类型时,够用就可以了,不建议多给,因为大的字段浪费内存,影响速度

以年龄为例:tinyint unsigned  not null 可以存储255岁,用int 会浪费3个字节

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

举例:以性别为例,

char(1):要用到3个字长字节

enum('男','女'):内部会转为数字来存,多了一个转换过程

tinyint (1/2/3): 定长,1个字节(最快)

3、尽量避免用NULL()

原因:NULL不利于索引,要用特殊的字节来标注;null在磁盘上占据的空间其实更大

猜你喜欢

转载自www.cnblogs.com/wodexk/p/10708475.html