mysql建表最佳實踐

目錄

一 自增主鍵 id

二 創建時間、更新時間

三 字段添加索引

四 數據邏輯刪除

五 靈活運用數據庫編碼

六 添加 version 字段


本文主要總結工作這些年來,一些建表的較好的實踐經驗,希望能給你一點點啓發或者幫助。

一 自增主鍵 id

爲什麼需要自增主鍵id?

性能、存儲空間兩個角度考慮:

性能:自增主鍵在新增記錄的時候屬於順序寫,磁盤的數據頁利用率高,不會觸發數據頁分裂;與業務相關的字段做主鍵,容易觸發隨機寫,爲了維護索引的有序性,需要移動索引樹頁子節點,容易引發數據頁分裂。

存儲空間:自增主鍵的長度一般要比業務主鍵要小,而非主鍵索引的葉子節點上存儲的都是主鍵的值,顯然,主鍵長度越小,非主鍵索引的葉子節點就越小,非主鍵索引佔用的空間也就越小。

因此,從性能和存儲空間兩個角度來考慮,自增主鍵是合理的。

事無絕對,是否可以在建表的時候不創建id?

你還真別說,我還真就遇到過,我們當初這塊有一個學生關注老師表,該表就沒有主鍵id,學生id和老師id作爲聯合主鍵id,說實話給學生關注老師表添加自增主鍵id,該字段也沒啥業務含義。

如果說創建自增主鍵id沒有業務含義,且能接受文件寫入一定的性能影響,我覺得不加自增id也是可以的。

二 創建時間、更新時間

爲什麼需要添加創建時間、更新時間呢?

有了創建時間和更新時間,對於數據統計、數據追蹤有很大的意義;其中更新時間天然就是一個版本的概念,便於樂觀鎖的實現。

創建時間、更新時間取哪裏的時間呢?WEB 服務器時間?DB 服務器時間?

建議取 WEB 服務器時間(Tomcat,Jboss,Apache),不建議取 DB 服務器時間。還真別說,我就遇到過 DB 服務器時間錯亂,導致線上數據錯誤的問題。都是血淋淋的教訓。

三 字段添加索引

爲什麼需要索引?

索引的目的是爲了減少查詢次數,提高查詢效率。可以充分的運用覆蓋索引、最左前綴原則、唯一索引等對查詢進行優化。

四 數據邏輯刪除

什麼是數據邏輯刪除?

所謂的邏輯刪除,就是給數據打上刪除標籤。

爲什麼不建議進行物理刪除?

因爲一旦進行物理刪除之後,數據就沒了,將來查問題、對數據進行追溯都不方便。再說了,我們是有原則的人,從刪庫到跑路的事情,我們堅決不幹

五 靈活運用數據庫編碼

如果說表需要存儲 emoji 等特殊字符,可以使用 utf8mb4 編碼,不需要建議使用 utf8 編碼。

六 添加 version 字段

version 字段是給表添加的版本字段,每次對錶進行更新,version 字段也進行更新。version 字段是用來實現樂觀鎖的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章