mysql表字段設計總結

2021-09-02 23:51:32 字數 1383 閱讀 5228

mysql的效能優化,涉及到很多知識,而良好的表設計是提公升效能的基礎,特別是針對於大表而言,好的設計對效能提公升很大,以下是設計方面的幾個優化點

1. 盡量避免null列

2. 盡量使用更簡單的資料型別

簡單意味著更低的磁碟儲存,記憶體占用和cpu效能開銷,特別是大資料量高併發的情況下,對效能影響比較大

對於索引列,越小的資料型別,意味著每個資料頁能存更多的分支,減少索引的次數

2.1 整數

整數型別主要有: tinyint,smallint,mediumint,int,bigint,分別用8,16,24,32,64個位進行儲存,儲存範圍是-2n-1-1 ~ 2n-1,n表示儲存的位數。可以使用unsigned來表明正數,這樣可以使儲存的上限變成2n-1,將近擴大了一半。

另外特別要注意的是,mysql中整型可以指定寬度,但是這個寬度並不是用來限制這個列的長度的,只是用來對查詢的結果進行補0顯示。也就是說int(1)和int(7),int(100)都是只能存8個byte32位,範圍都是-231-1 ~ 231,指定的寬度唯一的作用就是用來對客戶端查詢結果進行補0,而且得開啟zero_fill才行,比如age int(3) zerofill,如果插入值為10,那麼查詢的結果為010,插入1000,結果為1000。

如果確定沒有負數,可以使用unsigned 型別,讓可儲存的上限能擴大一倍,間接的使用更小的資料型別

2.2 實數

1 float和double來表示,屬於浮點數,存在精度丟失問題,但是因為cpu原生支援浮點運算,所以效能更好,float最大支援儲存4個位元組,double最大支援8個位元組

2 decimal 屬於定點數,精確型別,但是由於是通過mysql實現的精度計算,相對於浮點型來講效能要差點

實數型別選擇:

1 如果精度要求不高,直接使用float或double

2 如果對精度要求高,效能要求不高,可以考慮使用decimal

3 如果對精度和效能都有要求,可以考慮將小數轉為整型儲存,

比如財務系統,需要精確為分,可以將金額乘以100進行儲存到int或bigint裡面

2.4 字串

使用varchar要盡量設定小的位元組數,因為mysql在建立臨時表或排序的時候,會悲觀的給varchar型別分配最大的長度

總結:

1 字段設計時盡量選擇小而簡單的資料型別越好

2 除非必要,不使用可空列,用預設值代替

3 varchar型別雖然是變長,也應該按實際所需分配位元組

4 整型不需要指定長度

5 只有正數考慮用unsigned,可以擴大上限

6 實數精度要求不高情況,優先使用浮點型別float,double,如果精度要求高可考慮用整型轉化或直接使用decimal型別

MySQL表字段操作

語法 新增到末尾 alter table 表名 add 欄位名,資料型別 新增到開始 alter table 表名 add 欄位名 資料型別 first 新增到制定位置 alter table 表名 add 欄位名 after 欄位名 會新增在這個欄位名的下面 刪除字段 alter table 表名...

model 設計表 字段型別 屬性 不同表字段關係

orm物件關係對映,通過物件 即struct 與資料庫的table一一對應 func main 2.模型定義 2.1自定義表名 2.2自定義索引 2.3 自定義引擎 2.4 設定引數 多個設定間使用 分隔,設定的值如果是多個,使用,分隔.orm null rel fk orm 忽略字段 orm au...

MySQL表字段加索引

新增普通索引 此時key型別為mul alter table table name add index column column 例如 alter table poicity add index delete flag delete flag 新增主鍵索引 primary key alter ta...