表的优化与列类型选择
列选择原则:
1.字段类型优先级 整型>data,time>enum,char,varchar>blob
原因:整型time运算快 节省空间
Char/varchar 要考虑字符集的转换与排序时的教对集,速度慢
Blob无法使用内存临时表
2.够用就行 不要慷慨(smallint,varchar(N))
原因:大的字段浪费内存,影响速度
以varchar(10),varchar(300)存储的内容相同,但在联查时varchar(300)要花更多内存
3.尽量避免用NULL()
原因:NULL不利于索引,要用特殊的字节来标注
在磁盘上占据的空间其实更大
实验:
可以建立2张字段相同的表,一个允许为null,一个不允许为null,各加入1万条查看索引文件的大小,可以发现,为null的索引要大些
Enum
1.enum列在内部是用整型来存储的
2.Enum列与enum列相关联速度最快
3.Enum列比(var)chat的弱势---再碰到与char关联时要转化 要花时间
4.优势在于 当char非常长时 enum依然是整型固定长度 当查询的数据量越大时 enum的优势就越明显
5.Enum与char/varchar关联 因为要转化 熟读要比enum->enum,char->char要慢
但有时也这样用--就是在数据量特比大时,可以节省IO