SQL開發規範和基礎(一)

2021-09-29 13:05:33 字數 2117 閱讀 2104

秩序是自由的第一條件。–黑格爾

開發規範:

資料安全規範、應用安全規範、儲存過程規範、分表規範、應用規範、配置規範、建表規範、命名規範、索引規範

配置規範:

(1)mysql資料庫預設使用innodb儲存引擎

(2)保證字符集設定統一,mysql資料庫相關系統、資料庫、表的字符集都是用utf8。表情類的資料需要使用utf8mb4進行儲存。

(3)預設的事務隔離級別是rr(repeatable -read),建議初始化時統一設定為rc(read-committed),對於oltp業務更適合。

(4)建議單個表記錄數控制在2000w以內

(5)資料庫一般不超過50個,每個庫下的表數量不超過500個(包括分割槽表)

建表規範

(1)innodb禁止使用外來鍵約束,可以通過程式層面保證。

(2)儲存精確浮點數必須用decimal替代float和double

(3)整型定義中無需定義顯示寬度,比如:使用int,而不是int(4)

(4)不建議使用enum型別,可以使用tinyint代替

(5)盡可能不使用text、blob型別,如果必須使用,建議將過大字段或不常用的描述型較大字段拆分到其他表中;另外,禁止用資料庫儲存或檔案

(6)儲存年時使用year(4),不使用year(2)

(7)建議字段定義為not null

(8)建議dba提供sql審核工具,建表規範性需要通過審核工具審核後

命名規範

(1)庫、表、字段全部採用小寫

(2)庫名、表名、欄位名、索引名稱均使用小寫字母,並以_分隔

(3)庫名、表名、欄位名建議不超過12個字元。

(4)庫名、表名、欄位名做到見名知意,不需要新增注釋。

索引規範

(1)索引建議命名規範:idx_col1_col2[_coln]、uniq_col1_col2[_coln](如果欄位較長,建議採用縮寫)

(2)索引中的字段數建議不超過5個

(3)單張表的索引個數控制在5個以內

(4)innodb表一般都建議有主鍵列,尤其是高可用集群方案中是作為必須項的。

(5)建立復合索引時,優先將選擇性高的字段放在前面

(6)update、delete語句需要根據where條件新增索引

(7)不建議使用%字首模糊查詢,因為會導致全表掃瞄

(8)合理利用覆蓋索引,如:select email,uid from user_email where uid=xx,如果uid不是主鍵,可以建立覆蓋索引idx_uid_email(uid,email)來提高查詢效率

(9)避免在索引欄位上使用函式,否則會導致查詢時索引失效

(10)確認索引是否需要變更時要聯絡dba。

應用規範

(1)避免使用儲存過程、觸發器、自定義函式等,容易將業務邏輯和db耦合在一起,後期做分布式方案時會成為瓶頸

(2)考慮使用union all,減少適用union,因為union all不去重,而少了排序操作,速度相對比union要快,如果沒有去重的需求,優先使用union all

(3)考慮使用limit n,少用limit m n,特別是大表或m比較大的時候。

(4)較少或避免排序,如:group by中如果不需要排序,可以增加order by null

(5)統計表中記錄數時使用count( * ) 操作,而不是count(primary_key)或count(1);innodb表避免使用count (*)操作,計數統計實時要求較強可以使用memcache或者redis;非實時統計可以使用單獨統計表,定時更新。

(6)做欄位變更操作(modify column/change column)的時候必須加上原有的注釋屬性,否則修改後,注釋會丟失;

(7)使用prepared statement可以提高效能並且避免sql注入

(8)sql語句中in包含的值不應過多

(9)update、delete語句一定要有明確的where條件

(10)where條件中的字段值需要符合該字段的資料型別,避免mysql進行隱式型別轉化

(11)select、insert語句必須顯式的指明欄位名稱,禁止使用select *或者insert into table_name values()。就是要寫明查詢、插入哪些字段

(12)insert語句批量提交時,個數不應過多。

MYSQL開發規範和基礎

建表規範 1.innodb禁止使用外來鍵約束 2.儲存精確浮點數必須使用decimal替代float和double 3.整型定義中無需定義顯示寬度,直接使用int,而不是int 10 4.建議字段定義為not null 命名規範 1.庫 表 字段全部使用小寫 2.庫名 表名 欄位名建議不超過12個字...

Thinkphp 基礎 開發規範

使用thinkphp開發的過程中應該盡量遵循下列命名規範 特例 在thinkphp裡面,有乙個函式命名的特例,就是單字母大寫函式,這類函式通常是某些操作的快捷定義,或者有特殊的作用。例如 a d s l 方法等等,他們有著特殊的含義,後面會有所了解。由於thinkphp預設全部使用utf 8編碼,所...

開發規範(一)目錄規範

為提高團隊協作效率,規範檔案管理,方便專案後期維護,提高 質量,特制訂此文件,前端開發人員必須遵照本規範進行前台頁面開發。root member 業務模組名 conf controller 存放控制器 veiw 存放頁面 basic pc終端 mobile 手機終端 index 控制器名 index...