表名字段名均使用小寫字母,單詞間如下劃線分割。mysql
表名字段名長度禁止超過32個字符,最大支持爲64個字符,爲了統一規範,易於查詢,超過的單詞儘可能可讀縮略的形式進行書寫。sql
普通索引名稱以 idx_ 開頭,惟一索引以 uk_ 開頭。數據庫
外鍵儘可能以被引用表名稱加 _id 組成。性能
統一使用 INNODB 存儲引擎,除非某些特定緣由再行商議。優化
表字符集統一使用 UTF8,UTF8 字符集存儲漢字佔用3個字節,存儲英文字符佔用一個字節,若是emoji等表情符號的存儲需求,可申請使用 UTF8MB4 字符集。blog
字段統一添加註釋,id 可除外,type 型需指明主要值的含義,如」1 公開課,2 線上課」。索引
使用 timestamp 存儲時間。ip
表必需指定主鍵,儘可能採用自增方式。ci
不強制使用外鍵約束,此過程由業務端實現,提升性能。開發
能不用 NOT IN 就不用 NOT IN,會把空和NULL給查出來。
儘量少的使用 TEXT、BLOB 類型。
對於複雜的查詢,執行 explain,查看索引使用狀況。
重要的 SQL 必須被索引,好比 UPDATE、DELETE 語句的WHERE條件列 ORDER BY、GROUP BY、DISTINCT的字段。
不在低基數列上創建索引,例如「性別」。
若是是索引字段,必定要定義爲not null,由於 null 值會影響 cordinate 統計,影響優化器對索引的選擇,不能保證有值,設置相應的默認值。
單表索引個數儘可能限制在5個之內。
避免使大表的 JOIN。
最左前綴原則,mysql 使用聯合索引時,從左向右匹配,遇到斷開或者範圍查詢時,沒法用到後續的索引列。
儘可能減小直接使用 SELECT * 讀取所有字段。
使用 like 模糊匹配,%不要放首位。