天天看點

mysql 資料庫名稱 規範_MySQL-資料庫規範

降低業務耦合度,SQL語句盡可能簡單 大SQL語句盡可能拆成小SQL語句,MySQL對複雜SQL支援不好。

禁止使用觸發器、函數、存儲過程。

避免在資料庫中進行數學運算

避免使用select *,需要查詢哪幾個字段就select這幾個字段

IN()裡面的資料個數建議控制在 500 以内,可以用exist代替in,exist在某些場景比in效率高,盡量不使用not in

limit分頁注意效率。limit越大,效率越低。可以改寫limit,例如: select id from test - limit 10000,10 可以改寫為 select id from test where id > 10000 limit 10

當隻要一行資料時使用LIMIT 1 。

擷取大量資料時,建議分批次擷取資料,每次擷取資料少于 10000 條,結果集應小于1M

避免使用大表做 JOIN,使用group by分組、自動排序

SQL語句禁止出現隐式轉換,例如:select id from test where id=’1’,其中 id 列為 int 等數字類型。

避免核心業務流程SQL包含:計算操作、多表關聯、表周遊case when等複雜查詢,建議拆分成單表簡單查詢

OR 條件: f_phone=’10000’ or f_mobile=’10000’,兩個字段各自有索引,但隻能用到其中一個。可以拆分成2個sql,或者union all

用UNION ALL代替UNION:UNION ALL不需要對結果集再進行排序

任何新的select,update,delete上線,都要先explain,看索引使用情況。盡量避免extra列出現:Using File Sort,Using Temporary;rows超過1000的要謹慎上線

杜絕危險SQL

 比如:update/delete禁止使用where 1=1 這樣無意義或恒真的條件,以防遇到sql注入

 比如:SQL中不允許出現DDL語句,一般也不給予create/alter這類權限

DDL語句中盡量避免drop表,應先備份再删除

資料更新時

對同一個表的多次alter操作必須合并為一次操作

Mysql對表的修改絕大部分操作都需要鎖表并重建表,而鎖表則會對線上業務造成影響。

INSERT語句使用batch送出,values的個數不超過500

減少與資料庫互動次數,盡量采用批量SQL語句