mysql中有sa_SA工作-mysql设计规范
表的設計
字段盡量設置not null,mysql的null值和空字符串不一樣,null值占用空間,空字符串不占用空間。Null值占用空間,比較時會參與比較,但b樹索引不會存儲null值,因此當索引的字段包含null值,效率會下降。
一般沒有業務因素影響,采用數值型的自增長列作為主鍵。
Mysql的字段設計需要集約化,越小的占用存儲空間越好,能數值不字符,能日期不字符。
注意Mysql的varchar類型要計算好長度,因為mysql在表被查詢后會把表信息緩存到內存中,在內存中申請是按照最大長度申請。
將不常用的字段或大字段從主表拆分出來放到子表,通過主鍵關聯訪問;對于核心訪問頻度極高的表,需要反范式設計,增加冗余字段,減少與其它表的join操作。
索引的設計
主鍵字段盡量短,數值型是較好的選擇。Mysql innodb單列索引默認情況下限制長度767,使用utf8字符集,長度限制為255。
當查詢包含的條件和字段很少時,可以創建覆蓋索引。這樣數據可以全部在索引中獲得,將不再回表。
當需要在長文本字段上創建索引時,可以考慮增加一個虛擬hash列,采用crc32計算一個hash值,針對這個列創建索引。只用這個索引做等值查詢,索引的空間占會小很多。
組合索引在多列上創建,單列索引在一個列上創建。
查詢使用索引的條件不同一般組合索引需要按照“最左前綴”來執行查詢,并不是每個列都需要覆蓋,只是從左邊的列開始組合。
例如有索引key(a,b,c)
where a=xx and b=xx and c=xxx 此語句可以用到索引
where b=xx and a=xx and c=xxx 同上,順序沒有關系,同樣能用到索引
where a=xx and b=xx 可以用到索引
where a=xx and c=xx 可以用到索引
where b=xx and c=xx 用不到索引 where b=xx 用不到索引 where c=xx 用不到索引
Innodb只支持索引組織表,為了提高系統的性能,增加查詢速度,所以要建立索引.
好處:? ?1) 通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性
2) 大大加快數據的檢索速度
3) 可以加速表和表之間的連接,特別是在實現數據的參考完整性方
4) 在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間
開發管理項目中的索引應用,使用到普通索引、唯一索引、主鍵索引、組合索引.
例如:
1)sp_issue.product產品字段,時常做為查詢條件:設置字段不為NULL,且增加索引
ALTER TABLE sp_issue MODIFY product VARCHAR(100) NOT NULL;
ALTER TABLE sp_issue ADD INDEX INX_PRODUCT (PRODUCT);
2)人員權限表sp_user_priv無主鍵,留著普通索引,建聯合主鍵.
alter table sp_user_priv add constraint pk_sp_user_priv primary key (user_code,priv_type,priv_value);
序號
常用Oracle數據類型對應MySQL數據類型
Oracle
MySQL
1
TIMESTAMP(6)
DATETIME(6)或timestamp(6)
2
NUMBER
int or bigint
3
CHAR
char
4
CLOB
text or varchar
5
DATE
datetime
6
RAW
char
7
VARCHAR2
vharchar
8
BLOB
blob
數值型字段盡量不用字符類型存儲
原因:UTF-8 下:mysql下 VARCHAR(20)? ;表明字段可以存放20個字符,若中文則是占用60個byte(1中文=3BYTE),若英文或者數字則為占用20個byte。
INT 大小為4 字節(定義), 存儲的數值范圍是 (0,4 294 967 295), 即只要存儲的數值是這個范圍內,永遠都是占用4個BYTE。
假設 存放 1000這樣一個值, 如果存放到數據類型VARCHAR中, 那么就是 1000個byte,就是1kb大小
而存放到 int中,就只是占用4個byte,即只有0.004KB,差距很大。
字段不設置為NULL
當字段時常做為查詢條件時,設置改字段不為NULL,可以設置默認值來填充方式.
原因:1)MySQL的NULL不等于空字符串;WEB開發的時候,如果有的地方插入記錄是指定空字符串,有的地方插入記錄沒有指定值,查詢=’’的時候就會過濾掉為(NULL)的數據
2)索引不會包含有NULL值的列 只要列中包含有NULL值都將不會被包含在索引中,復合索引中只要有一列含有NULL值,那么這一列對于此復合索引就是無效的。所以我們在數據庫設計時不要讓字段的默認值為NULL
例如:設置sp_issue.product 不為NULL
ALTER TABLE sp_issue MODIFY product VARCHAR(100) NOT NULL;
2.1 數值型字段盡量不用字符類型存儲
原因:UTF-8 下:mysql下VARCHAR(20) ?;表明字段可以存放20個字符,若中文則是占用60個byte(1中文=3BYTE),若英文或者數字則為占用20個byte。
INT 大小為4字節(定義), 存儲的數值范圍是(0,4 294 967 295), 即只要存儲的數值是這個范圍內,永遠都是占用4個BYTE。
假設 存放 1000這樣一個值, 如果存放到數據類型VARCHAR中, 那么就是1000個byte,就是1kb大小
而存放到 int中,就只是占用4個byte,即只有0.004KB,差距很大。
總結
以上是生活随笔為你收集整理的mysql中有sa_SA工作-mysql设计规范的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python concat_python
- 下一篇: mysql1033错误存储引擎_MySQ