MySQL數(shù)據(jù)庫設(shè)計規(guī)范

命名規(guī)范

  1. 所有數(shù)據(jù)庫對象名稱必須使用小寫字母并用下劃線分割。
  2. 所有數(shù)據(jù)庫對象名稱禁止使用數(shù)據(jù)庫的保留關(guān)鍵字。
    MySQL關(guān)鍵字查詢:http://blog.csdn.net/yuxin6866/article/details/52210207。
    若使用了關(guān)鍵字作為字段,查詢該字段是必須使用``包裹起來,否則報錯。
  3. 數(shù)據(jù)庫對象名稱要做到見名識義,并且長度不要過長。
  4. 臨時表必須以tmp為前綴以日期為后綴。
  5. 備份表必須以bak為前綴以日期為后綴。
  6. 所有存儲相同數(shù)據(jù)的列名和列類型必須一致。

基本設(shè)計規(guī)范

  1. 所有表必須使用Innodb引擎。
    5.6版本以后的默認(rèn)引擎為Innodb,其支持事務(wù),行級鎖,更好的恢復(fù)性,高并發(fā)下性能更好。
  2. 數(shù)據(jù)庫和表的字符集統(tǒng)一用UTF8。
  3. 所有的表和字段都必須添加注釋。
  4. 盡量控制單表數(shù)據(jù)量的大小,簡易控制在500萬行內(nèi)。
    可以用歷史數(shù)據(jù)歸檔,分庫分表等手段來控制數(shù)據(jù)量的大小。
  5. 盡量做到冷熱數(shù)據(jù)分離,減小表的寬度(減小表的列數(shù))。
    減少磁盤IO,暴走熱數(shù)據(jù)的內(nèi)存緩存命中率。
    避免讀入無用的冷數(shù)據(jù)。
    經(jīng)常使用的列放到一個表中。
  6. 禁止在表中建立預(yù)留字段。
    預(yù)留字段的命名很難做到見名識義。
    預(yù)留字段無法取得存儲的數(shù)據(jù)類型。
    對預(yù)留字段的修改會對表進(jìn)行鎖定,影響并發(fā)性。
  7. 禁止在數(shù)據(jù)庫中存儲圖片,文件等二進(jìn)制數(shù)據(jù)。
    影響數(shù)據(jù)庫性能。
  8. 禁止在線上做數(shù)據(jù)庫壓力測試。
  9. 禁止從開發(fā)環(huán)境,測試環(huán)境中連接生成環(huán)境的數(shù)據(jù)庫。

索引設(shè)計規(guī)范

  1. 限制每張表上的索引的數(shù)量,建議單張表索引不超過5個。
    索引并不是越多越好。
  2. 禁止給表中的每一列建立一個索引。
  3. 每個Innodb表必須有一個主鍵。
    不使用更新頻繁的列作為主鍵,不使用多列主鍵。
    不使用UUID,MD5,HASH,字符串作為主鍵。
    主鍵建議使用MySQL的自增ID作為主鍵。
  4. 常見索引列建議:
    select、update、delete語句的where從句中的列。
    包含order by、group by、distinct中的字段。
    多表join的關(guān)聯(lián)列。
  5. 索引列的順序:
    區(qū)分度最高的列放在聯(lián)合索引的最左側(cè)。
    盡量吧字段長度小的列放在聯(lián)合索引的最左側(cè)。
    使用最頻繁的列放在聯(lián)合索引的最左側(cè)。
  6. 避免建立冗余和重復(fù)的索引。
  7. 對于頻繁的查詢優(yōu)先考慮使用覆蓋索引。
    覆蓋索引:包含所有查詢字段的索引。
    好處:避免Innodb表進(jìn)行索引的二次查找,可以把隨機(jī)IO變?yōu)轫樞騃O較快查詢效率。
  8. 盡量避免使用外鍵。
    不建議使用外鍵約束,但一定要在表與表之間的關(guān)聯(lián)鍵上建立索引。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容