mysql開發規範(優化)

規範

  1. 庫名、表名、字段名必須使用小寫字母, 並採用下劃線分割, 禁止超過32個字符(整齊、易讀)

  2. 臨時庫、表名須以tmp加日期爲後綴;

  3. 使用Innodb存儲引擎.【好處: 支持事務和行級鎖】

  4. 字符集統一使用UTF8mb4【most bytes 4《支持Emoji和全部中文】;

  5. 表,字段增加註釋,方便後期維護,枚舉型標明說明文字.

  6. 控制單表字段數量,建議冷熱數據分離,大字段分離,提升IO性能;

  7. 統一常用字段的含義與使用,比如很多表都會出現創建時間、更新時間、刪除時間、軟刪除字段、狀態等等,團隊內約定好對應的字段、類型、默認值等等。

  8. 不使用視圖、外鍵,而是通過代碼多次實現 【視圖/外鍵需要修改地方衆多,可讀性可遷移性較差】

  9. 單表數據量控制在5000w以內,超出要分庫分表;

  10. 字段選擇:

    • 字符串: 優先使用varchar,如果長度基本固定的列,如果該列恰好更新又特別頻繁,適合char,大文本使用text;
    • 數字: 使用tinyint(1)來代替 enum和boolean
    • 時間: 推薦使用datetime;
      • datetime 和timestamp類型所佔的存儲空間不同,前者8個字節,後者4個字節,timestamp只能到2038-01-19 11:14:07;
      • timestamp類型隨時間不同而不同.
  11. 索引:

    • 個數: 索引個數控制在5個以內, 索引在加快訪問速度的同時,會增加維護負擔,增大IO壓力,索引佔用空間是成倍增加的
    • 主鍵索引: 一般情況下優先考慮UUID,【考慮UUID和自增id的應用場景】
    • 在使用前使用explain看能否命中索引;
    • 組合索引要遵循最左原則: 例如index(‘c1’, ‘c2’, ‘c3’) where ‘c2’ = ‘aaa’ 不使用索引,where c2 = aaa and c3=sss 不能使用索引(如果第一個字段出現 範圍符號的查找,那麼將不會用到索引,如果是第二個或者第三個字段使用範圍符號的查找,那麼他會利用索引,利用的索引) https://www.cnblogs.com/chenshishuo/p/5030029.html
    • 索引字段必須使用 NOT NULL + 默認值的形式,其他的不加NOT NULL對於性能提升影響不大;
  12. SQL語句

    • 杜絕直接 SELECT * 讀取全部字段,列出要讀取的字段;
    • 使用where,limit,offset等字段標明範圍,儘量避免全表搜索;
    • 使用like模糊匹配,%儘量不要放首位,會導致搜索失效;

優化

  1. 大數據量獲取全部儘量採用並行分批的方案去做;
  2. 分頁優化: 儘量使用where條件 + limit 替換 offset + limit,
  3. SQL語句中IN包含的值不應超過200個,如果過多則分批;
  4. 讀寫分離;
  5. 爲搜索字段建索引;
  6. 避免select *, 列出要讀取的字段;

擴展

1. (轉)學習MySQL優化原理,這一篇就夠了!

 

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