1.IP地址存儲(chǔ)
例:127.0.0.1 一個(gè)段為(0-255)二進(jìn)制表示為(00000000-11111111)8位 一個(gè)字節(jié)
如果用varchar(15)存儲(chǔ)utf-8字符的話需要45個(gè)字節(jié)途蒋,如果用int存,只要4個(gè)字節(jié)
Mysql > select inet_aton("127.0.0.1") 對(duì)應(yīng)的整數(shù)為 2130706433
2.盡量使用整數(shù)表示字符串
當(dāng)字段具有離散性時(shí)讶迁,可以用數(shù)字來替代字符串术浪,如(男敦锌,女允青,未知) -->(1,2,3)
Mysql內(nèi)部的枚舉(單選)類型和集合(多選)類型例嘱,不推薦(維護(hù)成本高)
create table enum_test(e ENUM('fish','apple','dog') not null);
insert into enum_test(e) values ('fish'),('dog'),('apple');
select * from enum_test;
替代方案,關(guān)聯(lián)表user档桃, gender
- user
id | name | gender_id |
---|---|---|
1 | 張三 | 1 |
2 | 李四 | 3 |
- gender
id | title |
---|---|
1 | 男 |
2 | 女 |
3 | 保密 |
3.字段精度枪孩,變長(zhǎng)和定長(zhǎng)
存儲(chǔ)37.85元,浮點(diǎn)數(shù)不精確
典型方案:price decimal(8,2);定點(diǎn)數(shù)藻肄,有2位小數(shù)的定位數(shù)
另外方案:price int,bigint.整數(shù)。小單位拒担,大數(shù)額 例:3785(分) 37850(厘)
定長(zhǎng)類型: 存儲(chǔ)空間固定嘹屯。int,float,double,char,date,time,datetime,year,timestamp.
變長(zhǎng)類型:存儲(chǔ)空間可變。varchar,decimal,text.
varchar 65535 占用字段總空間
text 65535 獨(dú)立存儲(chǔ)从撼,不占用字段總空間
4.原則:盡可能選擇小的數(shù)據(jù)類型
5.原則:盡可能使用not null
5.1 not null的處理要比null字段的處理效率高些州弟!
5.2 不需要判斷是否為null
5.3 null在Mysql中不好處理钧栖,存儲(chǔ)需要額外空間,運(yùn)算也需要特殊的運(yùn)算符
除非使用is null婆翔,is not null拯杠。
5.4使用一個(gè)特殊的數(shù)據(jù)進(jìn)行占位:
int not null default 0.
string not null default "".
6.原則:字段具有邏輯含義并注釋完整
gender int comment "性別"
7.原則:?jiǎn)伪碜侄螖?shù)量不宜過多
8.原則: 可以預(yù)留字段
id, name, age, email, phone, filed1, filed2, filed3 ...