目錄
一 自增主鍵 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 欄位是用來實現樂觀鎖的。
mysql建表建索引6 mysql建表建索引
建表 create table sj projects id int 11 not null auto increment,title varchar 255 not null default comment 專案名稱 platform id int 11 not null default 0 co...
mysql建立使用者表 mysql 建庫建表建使用者
1.建立資料庫 create database school 2.使用資料庫 use school 3.建立使用者 create user jame localhost identified by jame 4.授權使用者 注意這裡是用了 哦,可以自己講school也替換成 號 grant sele...
mysql建表思路 MySQL 建表思路
思想 硬碟如倉庫,表如倉庫中貨架 常用與不常用等分類 欄位如貨物 尺寸是固定或變動 訪問貨物涉及到貨架的佔位 效率。資料型別選用,建表思路,正規化 資料型別特點 資料型別的速度關係 最快 整形 date,time char,enum varchar text blob 最慢 char 與 varch...