數據庫建表和查詢規範

建表規範

存儲引擎:

  • 表的存儲引擎必須選擇InnoDB
  • 每一個Innodb表都必須要有主鍵

字符集:

  • 表的字符集都選擇utf-8
  • 如果有需要存儲emoji可以使用utf8mb4

索引:

  • 單表的索引個數最好不要超過5個
  • 儘量使用複合索引,而不是添加新的索引
  • 不要在索引列上使用數學運算和函數運算
  • 注意組合索引的順序,以便利用索引的最左原則

字段:

  • 一張表的字段個數最好不要超過50個
  • 所有表和字段都需要添加中文註釋
  • DECIMAL代替FLOATDOUBLE存儲精確浮點數
  • 使用TINYINT來代替ENUM類型
  • 字段長度儘量按實際需要進行分配,不要隨意分配一個很大的容量
  • 字段定義爲NOT NULL要提供默認值
  • 儘可能不使用TEXT、BLOB類型
  • 每張表數據量建議控制在5000W以內
  • 區分使用TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT數據類型。例如取值範圍爲0-80時,使用TINYINT UNSIGNED
  • 區分使用DATETIME和TIMESTAMP。存儲年使用YEAR類型。存儲日期使用DATE類型。 存儲時間(精確到秒)建議使用TIMESTAMP類型

存儲:

  • 不在數據庫中存儲圖片、文件等大數據
  • 避免使用存儲過程、視圖、觸發器、事件

外鍵:

  • 避免使用外鍵,外鍵用來保護參照完整性,可在業務端實現

 

查詢規範

  • 禁止使用select *,要查詢數據後面必須緊跟字段值
  • 避免使用負向查詢,例如 not in、!=、not like,否則容易造成全表掃描
  • 避免使用%前導查詢,例如:like “%abc”,無法利用到索引
  • SQL中避免出現now()、rand()、sysdate()、current_user()等不確定結果的函數
  • 拆分複雜SQL爲多個小SQL,避免大事務
  • 禁止使用order by rand()
  • 儘量用IN來替換OR
  • 儘量避免多表Join查詢
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章