【最佳實踐】- MySQL

概述

本文介紹如何玩轉 MySQL, 可以說是 MySQL 開發規範, 也可以理解爲 MySQL 最佳實戰.

一、基礎規範

  1. 使用 InnoDB 存儲引擎
  2. 數據庫字符集使用 UTF8,校對字符集使用 utf8_general_ci
  3. 所有 字段 都儘量 添加註釋
  4. 庫名表名字段名 使用 小寫字母,禁止 超過32個字符 ,須見名知意
  5. 非唯一索引“idx_字段1_字段2” 命名,唯一索引 必須以 “uniq_字段1_字段2” 命名

二、查詢規範

  1. SQL 語句儘可能簡單,大的 SQL 想辦法 拆分 成小的 SQL 實現
  2. *不要使用SELECT ** ,查詢具體要用到的字段
  3. 禁止 like 做 where 條件 (會全表掃描且不能用索引)
  4. 除非必要,避免使用 != 等非等值操作符 (會導致用不到索引)
  5. Where 條件裏不要對列使用函數 (不會引用索引)
  6. 能確定返回結果只有一條時,使用limit 1 (LIMIT分頁注意效率,LIMIT越大,效率越低)
  7. 少用 子查詢,改用 JOIN(子查詢要在內存裏建臨時表)
  8. 多表 JOIN 的字段,區分度最大的字段放在前面
  9. IN 條件裏的 數據數量要儘量少超過200 個用 EXIST 代替 IN
  10. Where 字句中同一個表的 不同字段組合 建議 小於5組 (否則考慮分表)
  11. 禁止單條語句同時更新多個表
  12. 事務要儘量簡單,整個事務的時間長度不要太長

三、表設計規範

  1. DECIMAL 代替 FLOATDOUBLE 存儲精確浮點數(精確數據)
  2. 使用 TINYINT 代替 ENUM 類型(便於遷移時兼容)
  3. 儘可能不使用 TEXTBLOB 類型 (該數據類型不能設置默認值、不便於排序、不便於建立索引)
  4. 同一意義的字段設計定義必須相同(便於聯表查詢)
  5. 所有字段 均定義爲 NOT NULL(避免使用NULL字段,NULL字段很難查詢優化,NULL字段的索引需要額外空間,NULL字段的複合索引無效)
  6. 表必須有主鍵不使用更新頻繁的列做主鍵 、儘量不使用字符串列做主鍵,儘量使用非空的唯一自增鍵做主鍵

四、索引設計規範

  1. 單表索引數量不超過10個
  2. 單個字段不要超過兩個索引
  3. 新建的唯一索引必須不能和主鍵重複
  4. 避免冗餘和重複索引
  5. 儘量不要在頻繁更新的列上建立索引
  6. 不在低基數列上建立索引,例如狀態、類型等
  7. 不在索引列進行數學運算和函數運算(參與了運算的列不會引用索引)
  8. 複合索引須符合最左前綴的特點建立索引(mysql使用複合索引時從左向右匹配)
  9. 重要的 SQLwhere 條件裏的字段必須被索引
  10. Where 條件裏的 字段順序索引順序 無關,優化器會自動調整
  11. 索引選擇性 = Cardinality / Total Rows,即基數 ÷ 數據行數值越接近1說明使用索引的過濾效果越好
  12. 建立索引時,務必先explain,查看索引使用情況

最佳實踐

666 彩蛋

剛開始寫博客, 希望大家支持, 如果有沒疑問或不清楚的地方可以留言噢!

下週再見~

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