強制:不允許在跳板機上/生產伺服器上手工連接,查詢或更改線上數據。 強制:所有上線腳本必須先在測試環境執行,驗證通過以後方可在生產環境執行。 強制:上線腳本的編碼格式統一為UTF-8。 強制:訪問資料庫需要使用DNS功能變數名稱,不能直接寫IP。 ...
強制:不允許在跳板機上/生產伺服器上手工連接,查詢或更改線上數據
強制:所有上線腳本必須先在測試環境執行,驗證通過以後方可在生產環境執行。
強制:上線腳本的編碼格式統一為UTF-8
強制:訪問資料庫需要使用DNS功能變數名稱,不能直接寫IP
建議:DB名、表名、欄位名,都小寫,長度建議儘量不超過15
強制:建表_新建表必須包含自增主鍵列,主鍵列不應該被修改;
強制:建表_MySQL 字元集 utf8mb4 存儲引擎innodb
強制:建表_可能需要建索引的欄位,不允許為空 NOT NULL,其他字體內也建議為NOT NULL
強制:建表_需要為每張表的每個欄位添加欄位註釋(最好是中文)
強制:建表_不允許有外鍵
強制:建表_不允許用enum,set,bit數據類型
強制:建表_需要為timestamp類型指定預設值
強制:建表_定義列名時不能包含關鍵字
強制:建表_控制單表數據量 單表不超過2000w,建議不超過500w;
強制:建表_合理分表:限制單庫表數量在300以內,除未來可能的分表以外;
強制:建表_控制列數量,欄位少而精,欄位數建議在20以內;
建議:建表_自增列最好是為無符號型
建議:建表_自增列需相容不連續空洞出現的可能如1,7,15,23
建議:建表_少用text/blob varchar的性能會比text高很多;實在避免不了blob,請拆表
建議:建表_不使用HINT強制使用索引
強制:SQL_不在資料庫做運算 cpu計算務必移至業務層;
強制:SQL_禁用跨庫查詢。
強制:SQL_不允許線上程式做DDL操作
強制:SQL_select 程式代碼中不允許有SELECT *
強制:SQL_select 程式代碼中最多一次SELECT不允許超過5萬行記錄
強制:SQL_select 程式代碼中單次SELECT 執行時間不能超過5秒,建議不超過200ms
強制:SQL_刪除(delete),變更(update) 語句不允許不加where條件
強制:SQL_刪除(delete),變更(update) 語句不使用LIMIT
強制:SQL_刪除(delete),變更(update) 語句對超過50萬行的表 要求WHERE條件一定要用到索引
強制:SQL_刪除(delete),變更(update) 語句單個影響行數不能超過5千行。
強制:SQL_刪除(delete),變更(update) ,INSERT 語句在影響了5千行以後,需要SLEEP1秒才能執行下一組。不能併發,不能多線程
建議:SQL_拒絕3B 拒絕大sql語句:big sql 拒絕大事物:big transaction 拒絕大批量:big batch
強制:SQL_大語句拆小語句,減少鎖時間;一條大sql可以堵死整個庫;
建議:SQL_OR改寫為IN() or的效率是n級別; in的消息時log(n)級別;
建議:SQL_OR改寫為UNION,實際上更建議在程式中去做merge,語句儘量保持簡單。
建議:SQL_in的個數建議控制在200以內;
建議:SQL_limit高效分頁limit越大,效率越低 建議用id > $last_selected_id limit 10;
建議:SQL_使用union all替代union union有去重開銷
建議:SQL_少用連接join;不使用子查詢,子查詢轉化為JOIN執行
建議:SQL_請使用同類型比較,不同類型比較會發生類型轉換,當類型轉換髮生在索引欄位上時,將無法使用索引,很可能導致掃表的慢查詢。
建議:SQL_打散批量更新/刪除,UPDATE/DELETE一條SQL操作幾十萬、上百萬行數據,需要拆分成小SQL,分批次操作,減小對資料庫影響。
強制:索引_一個表中,最多可包含16個索引
強制:索引_一個索引中,最多可包含5個列
強制:索引_不允許建重覆索引,冗餘索引特殊情況下允許 ,但需要給出明確原因。
強制:索引_不使用全文索引
強制:索引_長字元欄位必須建首碼索引
建議:索引_索引一定不是越多越好(能不加就不加,要加的一定得加);
建議:索引_名字首碼為"idx_",檢查唯一索引首碼是不是"uniq_"