mysql效能優化筆記(1) 建表原則和字段設計

2021-08-07 10:57:29 字數 1575 閱讀 8699

建表原則:

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.一對多的關聯表可以新增冗餘字段,如商品分類表 和商品表 在首頁中需要顯示每個分類商品總數.解決方...