MySQL開發規範與要求
阿新 • • 發佈:2021-12-27
1 表必須有主鍵
主鍵與業務無關,不要更新。
2 單表資料量不要超過千萬行
2-1
單表資料太大,在資料庫增加欄位時候,
先建立一個新表,然後複製資料到新表,
再刪除老表,重新命名新表
資料量越大,越慢。
2-2
- 表越大,關聯查詢越慢
- 建立表的時候保留幾個欄位,比如bigint,varchar,預留2-3個
- 單表資料過大超過千萬,可以考慮分庫分表
3 禁止在系統的生產環境,執行DDL,包括加索引
- 1 可能會遇到data meta lock等問題
- 2 會鎖表,影響業務,可能超時。
4 不要在資料庫用儲存過程,函式,觸發器
資料庫僅僅用例記錄,不要參與複雜計算
建議將計算邏輯放到Java程式碼中
5 生產下,禁止大事務
比如,update更新全表,如果記錄超過10萬行,需要分批執行。
6 慎用子查詢
- 儘量使用join關聯表,避免子查詢,子查詢影響效能。
7 欄位能用整型,一定不要varchar
- 整型的效能會好很多
8 不允許在表中大欄位
比如:text,lob,blob,
如果儲存的是檔案,圖片,僅僅保留地址
9 三正規化
可以適當冗餘
10 多表事務
同一事務多表更新,需要按照表的更新順序更新,避免死鎖
11 使用count(*)
使用count(*) 統計所有行,包括空行
使用count(列名),空行不會被統計到。
12 count(distinct(列名))
計算該列除空行之外,不重複的行數
13 count(distinct(列名1,列名2))
如果其中某一列都是空,另外一列有不同的值,返回也是0
14 使用sum注意 npe問題
當某一列全是空的時候,count(列名)會返回0,但是sum(列名)會返回NULL,需要特別注意。
如何解決呢?
select if(isnull(sum(列名),0,sum(列名))) from table
我對任何唾手而得,快速,出自本能,即興,含混的事物沒有信心。我相信緩慢,平和,細水長流的力量,踏實,冷靜。我不相信缺乏自律精神和不自我建設,不努力,可以得到個人或集體的解放。