1. 程式人生 > 其它 >資料庫和索引設計簡要筆記

資料庫和索引設計簡要筆記

列設計規範

  • 正確區分tinting、int、bigint的範圍

  • 使用varcher(20)儲存手機號,不要使用整數(請求引數可能是字串,防止型別的隱式轉換)

  • 使用int儲存ipv4 不要使用char(15)

  • 涉及金額使用decimal/varchar,並指定精度

  • 不要設計為null的欄位、而是用空字元,因為null需要更多的空間、並且是的索引和統計變得更為複雜。

索引規範

  • 唯一索引使用uniq_[欄位名]來命名

  • 非唯一索引使用idx_[欄位名]來命名

  • 不建議在頻繁更新的欄位上建立索引

  • 單張表的索引數量建議控制在5個以內,索引過多,不僅會導致插入的效能下降,還可能導致mysql的索引出錯和效能下降

  • 組合索引欄位數量不建議超過5個,理解組合索引的最左匹配原則,避免重複建設索引,比如你建良(x,y,z)相當於你建了(x)(x,y) (x,y,z)

SQL規範

  • 禁止使用select *,只獲取必要欄位,select會增加cpu/io/記憶體、頻寬的消耗。

  • Insert 必須指定欄位,禁止使用insert into table values()指定欄位插入,在表結果變更時,能保證對應用程式無影響。

  • 隱式型別轉換會使索引失效,比如:手機號搜尋時沒有轉成字串

  • 禁止在where後面的列中使用函式或者表示式,導致不能命中索引。

  • 禁止負向查詢(!= not like not in等 )以及%開頭的模糊查詢,導致不能命中索引。

  • 避免直接返回大結果導致造成記憶體溢位,可以採用分段和遊標方式。

  • 返回結果儘量採用limit分頁顯示。

  • 儘量在order by group by的列上建立索引。

  • 大表掃描儘量放在映象庫上去做。

  • 禁止大表join查詢和子查詢。

  • 儘量避免資料庫內建函式作為查詢條件。

----------天道酬勤----------------