1. 程式人生 > 其它 >MySQL開發規範與要求

MySQL開發規範與要求

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
我對任何唾手而得,快速,出自本能,即興,含混的事物沒有信心。我相信緩慢,平和,細水長流的力量,踏實,冷靜。我不相信缺乏自律精神和不自我建設,不努力,可以得到個人或集體的解放。