1.IP地址存储
例:127.0.0.1 一个段为(0-255)二进制表示为(00000000-11111111)8位 一个字节
如果用varchar(15)存储utf-8字符的话需要45个字节,如果用int存,只要4个字节
Mysql > select inet_aton("127.0.0.1") 对应的整数为 2130706433
2.尽量使用整数表示字符串
当字段具有离散性时,可以用数字来替代字符串,如(男,女,未知) -->(1,2,3)
Mysql内部的枚举(单选)类型和集合(多选)类型,不推荐(维护成本高)
create table enum_test(e ENUM('fish','apple','dog') not null);
insert into enum_test(e) values ('fish'),('dog'),('apple');
select * from enum_test;
mysql_enum.png
替代方案,关联表user, gender
- user
id | name | gender_id |
---|---|---|
1 | 张三 | 1 |
2 | 李四 | 3 |
- gender
id | title |
---|---|
1 | 男 |
2 | 女 |
3 | 保密 |
3.字段精度,变长和定长
存储37.85元,浮点数不精确
典型方案:price decimal(8,2);定点数,有2位小数的定位数
另外方案:price int,bigint.整数。小单位,大数额 例:3785(分) 37850(厘)
定长类型: 存储空间固定。int,float,double,char,date,time,datetime,year,timestamp.
变长类型:存储空间可变。varchar,decimal,text.
字段大小.png
varchar 65535 占用字段总空间
text 65535 独立存储,不占用字段总空间
4.原则:尽可能选择小的数据类型
5.原则:尽可能使用not null
5.1 not null的处理要比null字段的处理效率高些!
5.2 不需要判断是否为null
5.3 null在Mysql中不好处理,存储需要额外空间,运算也需要特殊的运算符
mysql_null.png
除非使用is null,is not null。
5.4使用一个特殊的数据进行占位:
int not null default 0.
string not null default "".
6.原则:字段具有逻辑含义并注释完整
gender int comment "性别"
7.原则:单表字段数量不宜过多
8.原则: 可以预留字段
id, name, age, email, phone, filed1, filed2, filed3 ...
网友评论