原則:
能小不要大
能定不要變
能數值,不要字符串。
1、在精度要求高的應用中,建議使用定點數來存儲數值,以保證結果的準確性。
create table t2(price float(9,2),dprice decimal(9,2));
insert into t2 values(1234567.55,1234567.55);
2、錄入手機號帶來的問題,
使用char(11)會佔用較多的字節,gbk佔用2字節*11,utf-8佔用3*11,
可以使用bigint,寬度是20,只佔用8個字節。
3、 ip地址也可以採用int整型。
如果用varchar()來存儲ip地址。
255.255.255.255 utf-8字符串會佔用15*3+2=47字節,
如果使用int的只佔用4個字節。
使用函數進行轉換:
inet_aton():把ip地址轉換成整數
inet_ntoa();把整數轉換成ip地址。
IPv4存儲爲int型
PHP:
ip2long() :ip地址到整數的轉換,
long2ip():整數到ip地址的轉換。
MySQL: inet_aton(), inet_ntoa();
4、根據需求選擇最小整數類型。比如用戶在線狀態:離線,在線,離開,忙碌,隱式等,可以採用0,1,2,3,來表示。
5、避免字段內容爲null,原因:null不利於索引,要用特殊的字節來標註,在磁盤上佔據的空間其實更大。
create table t3(mobile bigint);
create table t5(name char(1) not null default '');
insert into t5 values('a'),('b'),('c');
create table t6(name char(1));
insert into t6 values('a'),(null),('c');
|
NULL的判斷只能用is null,is not null
NULL 影響查詢速度,一般避免使值爲NULL
6、三範式
第一範式:數據的字段不能在分割,只要是關係型數據庫則天生就滿足第一範式。
第二範式:通俗的說,就是不能有完全相同的兩條記錄,可以使用一個主鍵解決。
第三範式:通俗的說,存儲的數據不能冗餘。