核心軍規
1、不在資料庫做運算,cpu計算務必移至業務層
2、控制單錶資料量
int型不超過1000w,
含char則不超過500w;
合理分表;
限制單庫表數量在300以內;
3、控制列數量
字段少而精,字段數建議在20以內;
4、平衡正規化與冗餘
效率優先;
往往犧牲正規化;
5、拒絕3b
拒絕大sql語句:big sql
拒絕大事務:big transaction
拒絕大批量:big batch
欄位類軍規
6、用好數值型別
tinyint(1byte)
smallint(2byte)
mediumint(3byte)
int(4byte)
bigint(8byte)
bad case:int(1)/int(11)
7、字元轉化為數字
用int而不是char(15)儲存ip
8、優先使用enum或set
例如:***enum (『f』, 『m』)
9、避免使用null欄位
null欄位很難查詢優化;
null欄位的索引需要額外空間;
null欄位的復合索引無效;
badcase:'name' char(32) default null 'age' int not null
goodcase:'age' int not null default 0
10、少用text/blob
varchar的效能會比text高很多;
實在避免不了blob,請拆表;
11、不在資料庫裡存
索引類軍規
12、謹慎合理使用索引
改善查詢、減慢更新;
索引一定不是越多越好(能不加就不加,要加的一定得加);
覆蓋記錄條數過多不適合建索引,例如「性別」;
13、字元字段必須建字首索引
14、不在索引做列運算
badcase:select id where age +1=10;
15、innodb主鍵推薦使用自增列;
主鍵建立聚簇索引;
主鍵不應該被修改;
字串不應該做主鍵;
如果不指定主鍵,innodb會使用唯一且非空值索引代替;
16、不用外來鍵
請由程式保證約束;
sql類軍規
17、sql語句盡可能簡單
一條sql只能在乙個cpu運算;
大語句拆小語句,減少鎖時間;
一條大sql可以堵死整個庫;
18、簡單的事務
事務時間盡可能短;
19、避免使用trig/func
觸發器、函式不用;
客戶端程式取而代之;
20、不用select *
消耗cpu,io,記憶體,頻寬;
這種程式不具有擴充套件性;
21、or改寫為in()
or的效率是n級別;
in的訊息時log(n)級別;
in的個數建議控制在200以內;
select id from t where phone=』159′ or phone=』136′;
=>select id from t where phone in(』159′, 』136′);
22、or改寫為union
mysql的索引合併很弱智
selectidfromtwherephone = 』159′ or name = 『john』;
=>selectidfromtwherephone=』159′
unionselectidfromtwherename=』jonh』
23、避免負向%
24、慎用count(*)
25、limit高效分頁
limit越大,效率越低
selectidfromt limit10000,10;
=>select id from t where id >10000 limit 10;
26、使用union all替代union
union有去重開銷
27、少用連線join
28、少用group by
分組;自動排序;
29、請使用同型別比較
30、使用load data導資料
load data比insert快約20倍;
31、打散批量更新
32、新能分析工具
show profile;
mysq ls la;
mysql dump slow;
explain;
show slow log;
show process list;
show query_response_time(percona);
Mysql資料庫開發36條軍規
盡量不在資料庫做運算 控制單錶資料量 保持表身段苗條 平衡正規化與冗餘 拒絕3b 大sql 大事物 大批量 用好數值字段型別 將字元轉化為數字 優先使用enum或set 避免使用null欄位 少用並拆分text blob 不在資料庫裡存放 謹慎合理新增索引 字元字段必須建立字首索引 不在索引列做運算...
MySQL 資料庫開發的 36 條軍規
mysql 資料庫開發的 36 條軍規 寫在前面的話 總是在災難發生後,才想起容災的重要性 總是在吃過虧後,才記得曾經有人提醒過。一 核心軍規 1 不在資料庫做運算 cpu計算務必移至業務層 2 控制單錶資料量 單錶記錄控制在1000w 3 控制列數量 字段數控制在20以內 4 平衡正規化與冗餘 為...
MySQL資料庫開發的 36 條軍規
來自一線的實戰經驗,主要針對dba和後端開發人員,總是在災難發生後,才想起容災的重要性 總是在吃過虧後,才記得曾經有人提醒過。核心軍規 盡量不在資料庫做運算 控制單錶資料量 純int不超過10m條,含char不超過5m條 保持表身段苗條 平衡正規化和冗餘 拒絕大sql,複雜事務,大批量任務 欄位類軍...