mysql一些規範

2021-07-30 18:12:15 字數 2514 閱讀 8023

一.規範

1命名規範

①使用小寫字母+下劃線分割

②名字要和意義相關 欄位名最好不要超過32個字元,不能使用保留字(萬一使用 在sql語句中要用單引號把他包住)

查詢關鍵字:

4欄位設計規範

①優先選擇符合儲存需求的最小資料型別

a.盡量把字串轉為數字型別儲存(

如利用mysql函式inet_aton把字串型別的ip轉為數字再存,)

如對於非負整數 優先使用無符號整形儲存

varchar(n)中的n代表的是字元而不是位元組

②避免使用text blog 型別

建議把blog或tex列分離到單獨的擴充套件表中

text或blog型別只能使用字首索引

③避免使用列舉型別enum

修改enum需要使用alter語句

enum的orderby 效率低 需要額外操作

禁止使用數值作為enum的列舉值

④盡可能把所有列定義為not null

索引null列需要額外的空間儲存

列的比較和計算時對於null值要做特別處理

⑤ 不要使用字串儲存日期(timestamp或datetime, timestamp比datetime占用空間小 但是只能儲存1970-01-01 00:00:01~2038-01-19-03:14:07之間的時間)

原因:無法使用日期函式進行比較,用字串儲存占用更多空間)

⑥財務金額資料必須使用精準浮點 decimal

mysql儲存浮點有2 種

非精準浮點 float double

精準浮點 decimal

5.sql開發規範

① 建議使用預編譯語句進行資料庫操作

原因:預編譯語句可以重複使用執行計畫, 避免重複編譯sql語句,一次解析多次使用 提高處理效率,還可以防止sql注入

②避免資料型別的隱式轉換(常見於where從句中 當列型別和引數型別不一致時容易出現隱士轉換)

隱式轉換會導致索引失效

eg: select name from user_account where id = 『111』;id 是整型 引數是字串 會出現隱式

③充分利用表上已經存在的索引

*避免使用雙% eg: a like 『%123%』;

*乙個sql只能利用復合索引的一列進行範圍查詢(如果在a列進行的都是範圍查詢 就把a放在聯合索引的右側)

*使用left join 或not exsits 來代替not in 操作(not in容易導致索引失效)

④程式連線不同的資料庫使用不同的賬號 禁止跨庫查詢

好處:為資料庫遷移和分庫流出餘地 降低業務耦合度 避免許可權過大產生安全風險

⑤禁止使用select *

消耗更多cpu 和io

無法使用覆蓋索引

⑥禁止使用不含有字段列表的insert語句

insert into t value(『a』」b)

⑦避免使用子查詢 盡量把子查詢優化為join操作

原因:子查詢的結果集無法使用索引 子查詢會產生臨時表操作 影響效率,消耗過多io cpu

⑧避免關聯太多的表(建議不超過5個 mysql最多關聯61個)

每join乙個表多占用一部分記憶體

⑨減少同資料庫互動的次數

資料庫更適合批量操作

合併多個相同的操作到一起

eg:alter table t1 add column c1 int,change column c2 c2 int…

10 使用in代替or

in可以更有效的利用索引

11 禁止使用order by rand()進行隨機排序 對mysql影響太大 會把所有復合條件的資料載入到記憶體進行排序

建議:在程式中隨機獲取乙個隨機值 然後從資料庫中獲取資料

12 where 從句中禁止對列進行函式轉換和計算

(因為會導致無法使用索引)

13.在明顯不會有重複值時使用union all而不是union(因為union會把所有資料放到臨時表中後再進行去重操作 union all不會再對結果集進行去重)

14,.合理拆分大sql為多個小sql

(mysql乙個sql只能使用乙個cpu進行計算 拆分後可以同時使用多個cpu提高效率)

6.操作行為規範

①超過100w行的批量寫操作 要分批次進行(大批量的寫操作會造成嚴重的主從延遲 binlog日誌為row格式會產生大量日誌 避免產生大量事務操作)

②對大表資料結構修改一定要謹慎 會造成嚴重的鎖表操作 尤其是生產操作 大表使用pt-online-schema-change修改表結構可以避免以上情況

③禁止為程式使用的賬號賦予super許可權

(當達到最大連線數限制時 還執行1個有super許可權的使用者連線 所以super許可權只能留給dba處理問題的賬號使用)

④對於程式連線資料庫賬號 遵循許可權最小的原則

(程式使用資料庫賬號只能在乙個db下使用 不准跨庫 程式使用的賬號原則上不准有drop許可權

一些程式設計規範

類和介面命名 類名是個名詞,採用大小寫混合的方式,首字母必須大寫,如果為片語,則每個單詞的首字母也必須要大寫,類名必須使用名詞,或名詞片語。介面一般要使用able ible er 等字尾。方法的命名 方法名是乙個動詞,採用大小寫混合的方式,第乙個單詞的首字母小寫,其後單詞的首字母大寫。類中常用方法的...

一些編碼規範

先判斷是否為空list null list.size 0提示條件裡不要有感嘆號!客戶很反感。字串加trim 判斷。去掉前邊的空格。儘量減少對變數的重複計算 明確乙個概念,對方法的呼叫,即使方法中只有一句語句,也是有消耗的,包括建立棧幀 呼叫方法時保護現場 呼叫方法完畢時恢復現場等。所以例如下面的操作...

mysql 資料庫使用的一些規範

通常來講,各個網際網路公司的資料庫分為5個資料庫環境 這些環境的機器,一定要做到許可權劃分明確,讀寫帳號分離,並且有辨識度,能區分具體業務。例如使用者名稱w wap,r wap 能看出來,讀寫帳號是wap應用的 開發規範本身也包含幾部分 基本命名和約束規範,字段設計規範,索引規範,使用規範等 規範存...