資料庫和索引設計簡要筆記
阿新 • • 發佈:2021-12-14
列設計規範
-
正確區分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等 )以及%開頭的模糊查詢,導致不能命中索引。
-
避免直接返回大結果導致造成記憶體溢位,可以採用分段和遊標方式。
-
-
儘量在order by group by的列上建立索引。
-
大表掃描儘量放在映象庫上去做。
-
禁止大表join查詢和子查詢。
-
儘量避免資料庫內建函式作為查詢條件。