标签:HERE 增加 常用 国家 时区 个人简介 临时表 date tin
1.表的优化和列类型的选择
a.定长与变长分离:
如:id int 占四个字节,char(4)占四个字节,也是定长,time即每一个单元之占的字节是固定的。
核心且常用字段,直建成定长,放在一张表中。
而varchar,text,blob这种变长字段,适合放在一张表中,用主键与核心表连接起来。
栗子:比如说一个学生信息:学号,性别,年龄,电话号码等放在主表中,而个人简介等放在补充表中,用来作为不常用查询的表值。
2 常用字段和不常用字段要分离、
需要结合网站具体的业务来分析,肥西字段的查询场景,把查询评率低的字段单拆出来
3 在一对多,需要关联同级的字段上,添加冗余字段,增加效率。
列类型的选择:
字段优先级:整型 > date,time > enum,char > varchar > blob,text
整型:定长,没有国家/地区之分,没有字符集的差异
time :定长,运算快,节省时间,考虑时区,写sql不方便 :where > ‘2005-10-12‘
char :定长,考虑字符集和排序(校对集)
varchar :不定长,要考虑字符集的转换与排序时的校对集,速度慢
text,blob; 无法使用内存临时表(排序等操作只能在硬盘上进行)
附(关于date,time的选择,大师的明确意见,直接选int unsigned not null,存储时间戳)
2 够用就行,不要慷慨(如 smallint ,varchar(N))
原因:大的字段浪费内存,影响速度
栗子:年龄,tinyint unsigned not null,可以存储255岁,用int 浪费了3个字节
以varchar(10),varchar(200)存储的内容相同,但是表联查时,varchar(200)要花费更多内存
3 尽量避免用null
原因:null不利于索引,用用特殊的字节来标注。
在磁盘上占据的空间其实更大。(mysql)
另外,null也不便于查询
4 Enum列的说明、
1.enumeration列在内部是用整型来存储的
2enum列与enum列相关联速度最快
3enum列比varchar的弱势
标签:HERE 增加 常用 国家 时区 个人简介 临时表 date tin
原文地址:https://www.cnblogs.com/li-yi-learn/p/9011869.html