資料庫設計規範 參考

2021-10-06 17:05:36 字數 1705 閱讀 9994

`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...