建表原則:
1.表必須定義主鍵,預設為id,整型自增。
2.id欄位作為自增主鍵,禁止在非事務內作為上下文作為條件進行資料傳遞,禁止非自增非數字型別主鍵設計出現。
3.禁止使用外來鍵,觸發器,儲存過程
4.常用字段與不常用字段分離
5.表預設使用innodb,國內表字符集預設使用gbk,國際預設使用utf8的表
6.單錶一到兩年內資料量超過500w或者資料容量超過10g考慮分表,且需要提前考慮歷史資料遷移或者應用自行刪除歷史資料
7.單錶記錄大小禁止超過8k(列長度(中文)*2(gbk)/3(utf8)+列長度(英文)*1)
8.日誌類資料不建議儲存在
mysql
上,優先考慮
hbase
,如需要儲存請使用壓縮表儲存
字段設計
1.表被索引列必須定義為not null,並設定default值
2.禁止使用float、double型別,建議使用decimal替代
3.禁止使用blob,text型別保留大文字、文字、,建議使用其他方式儲存(檔案伺服器),
mysql
只儲存指標資訊
4.禁止使用varchar型別作為主鍵語句設計
5.varchar長度設計需要根據業務實際需要進行長度控制,禁止預留過長空間
6.加入冗餘字段,提高查詢速度
7.欄位型別優先順序
整型 >date,time > enum char > varchar > blob text
整型:定長,沒有國家/地區之分,沒有字符集的差異
比如:tinyint 1,2,3,4 char(1) a,b,c,d
從空間上,都是佔乙個位元組,但是order by排序,前者快
原因:後者需要考慮字符集與校對集(就是排序規則)
time 定長
enum 主要起到約束目的,內部用整型來儲存
char 定長
varchar 變長
text/blob 無法用到記憶體臨時表
附錄:整型所佔位元組,以及能表示的最大長度
型別位元組
最大值最小值
tinyint unsigned
1255
0smallint unsigned
265535
0mediumint unsigned
32^24-1
0int unsigned
42^32-1
0bigint unsigned
82^64-1
0tinyint signed
1127
-128
smallint signed
232767
-32768
mediumint signed
32^23-1
-2^23
int signed
42^31-1
-2^31
bigint signed
82^63-1
-2^63
mysql建表原則 mysql優化1 建表原則
建表三大原則 定長和變長分離 常用字段和不常用字段分離 使用冗餘欄位或冗餘表 1 定長與變長分離 如 id int,佔4個位元組,char 4 佔4個字元長度,也是定長,time 即每乙個單元值佔的位元組是固定的。在磁碟上查詢時,由於每一行長度固定,比如長度為10000,查下一條時只需查 10001...
mysql建表效能優化 MYSQL建表優化
除非單錶資料未來會一直不斷 否則不要一開始就考慮拆分,拆分會帶來邏輯 部署 運維的各種複雜度,一般以整型值為主的表在千萬級以下,字串為主的表在五百萬以下是沒有太大問題的。1 字段 a 盡量使用tinyint smallint medium int作為整數型別而非int,如果非負則加上unsigned...
mysql 建表原則 MySql基本的建表原則
1.定長和變長的分離 如int,char,time所佔位元組是固定的字段放在一張表 如varchar,text所佔位元組不確定的字段放在一張表中 2.常用字段和不常用字段進行分離,根據查詢頻率來設計 3.一對多的關聯表可以新增冗餘字段,如商品分類表 和商品表 在首頁中需要顯示每個分類商品總數.解決方...