`create_time` timestamp not null default current_timestamp,
`update_time` timestamp null default null on update current_timestamp,
或者使用框架預設或建議的欄位名稱。
tinyint (1byte)
smallint (2byte)
mediumint (3byte)
int (4byte)
bigint (8byte)
如果數值字段沒有那麼大,就不要用 bigint。
單張表中索參數量不超過5個。
單個索引中的字段數不超過5個。
對字串使用字首索引【了解字首索引】,字首索引長度不超過8個字元。
建議優先考慮字首索引,必要時可新增偽列並建立索引。
索引名必須全部使用小寫。
唯一索引按照「uniq_欄位名稱[_欄位名稱]」進用行命名。例如uniq_age_name。
非唯一索引按照「idx_欄位名稱[_欄位名稱]」進用行命名。例如idx_age_name。
組合索引建議包含所有欄位名,過長的欄位名可以採用縮寫形式。例如idx_age_name_add。
表必須有主鍵,推薦使用unsigned自增列作為主鍵。
唯一鍵由3個以下字段組成,並且欄位都是整型時,可使用唯一鍵作為主鍵。其他情況下,建議使用自增列或發號器作主鍵。
分情況使用外來鍵。
聯表查詢時,join列的資料型別必須相同,並且要建立索引。
不在低基數列(字段值區分度不高)上建立索引,例如「性別」。
選擇區分度大的列建立索引。組合索引中,區分度大的字段放在最前。
不對過長的varchar欄位建立索引。建議優先考慮字首索引,或新增crc32或md5偽列並建立索引。
合理建立聯合索引,(a,b,c) 相當於 (a) 、(a,b) 、(a,b,c)。
合理使用覆蓋索引減少io,避免排序。【覆蓋索引是select的資料列只用從索引中就能夠取得,不必讀取資料行,換句話說查詢列要被所建的索引覆蓋。索引的字段不只包含查詢列,還包含查詢條件、排序等。】
表必須有主鍵。
不使用更新頻繁的列作為主鍵。
盡量不選擇字串列作為主鍵。
不使用uuid md5 hash這些作為主鍵(數值過於離散) 。
預設使非空的唯一鍵作為主鍵。
建議選擇自增或發號器。
比如:update、delete語句的where條件列。
order by、group by、distinct的字段。
區分度最大的字段放在前面。
核心sql優先考慮覆蓋索引。
避免冗餘和重複索引。
索引要綜合評估資料密度和分布以及考慮查詢和更新比例。
不在低基數列上建立索引,例如「性別」。
不在索引列進行數**算和函式運算。
外來鍵用來保護參照完整性,可在業務端實現。
對父表和子表的操作會相互影響,降低可用性。
要改為其他的default或者空。null非常影響索引的查詢效率。
多條字段重複的語句,要修改語句條件欄位的順序,為其建立一條聯合索引,減少索參數量。
select id from tlimit 10000, 10; => select id from t where id > 10000 limit10;
資料庫設計規範參考
1 關於表型別 表型別盡是用innodb,少用myisam 在讀取上innodb與myisam差不了多少,但在update上,myisam很吃虧 innodb 為行級鎖,支援事務,myisam為表級鎖,有時候會給表帶來不可預知的破壞 2 關於索引 索引可以加快我們sql查詢的效率,但並不是索引越多越...
資料庫設計規範
使用明確 統一的標明和列名,例如 school,schoolcourse,courceid。資料表名使用單數而不是複數,例如 studentcourse,而不是studentcourses。資料表名不要使用空格。資料表名不要使用不必要的字首或者字尾,例如使用school,而不是tblschool,或...
資料庫設計規範
csm簡寫會方便很多 就不要用member id,一致性方便大家理解 system.currenttimemillis 進行儲存text查詢是會產生臨時磁碟檔案,效能差進行擷取儲存型別 占用位元組 範圍tinyint 1 128 127 smallint 2 32768 32767 mediumin...