語(yǔ)句盡量簡(jiǎn)單,不在數(shù)據(jù)庫(kù)做復(fù)雜運(yùn)算;select,insert一定要帶上字段名,不允許select *,優(yōu)化LIMIT分頁(yè):不要用LIMIT start, offset。
2
/7
不允許where后面字段上做運(yùn)算或者加函數(shù),會(huì)導(dǎo)致用不了索引;禁用select for update、 insert……select from、insert TB values……(必須明確給出字段)、order by rand()語(yǔ)法。
3
/7
只用inner join或者left join;禁止用right join。表關(guān)聯(lián)的on必須有索引,只關(guān)聯(lián)需要表,只選擇需要的列。
4
/7
復(fù)雜查詢拆分簡(jiǎn)單查詢;盡量小批量小語(yǔ)句分段執(zhí)行;一個(gè)sql不要超過(guò)1G的binlog;大事務(wù)可以set auto_commit =0 關(guān)閉自動(dòng)提交,但是拒絕濫用,會(huì)導(dǎo)致阻塞。
5
/7
拒絕3大類型sql:大SQL (BIG SQL),大事務(wù) (BIG Transaction),大批量 (BIG Batch) ,合理拆分sql。小語(yǔ)句小事務(wù)好處:減少鎖、用上多cpu,緩存命中率高
6
/7
語(yǔ)句盡量簡(jiǎn)單,不在數(shù)據(jù)庫(kù)做復(fù)雜運(yùn)算,不用存儲(chǔ)過(guò)程、函數(shù),大消耗性能的SQL很容易對(duì)其他SQL產(chǎn)生影響,MySQL優(yōu)化器不足,處理復(fù)雜SQL時(shí)容易選擇錯(cuò)誤執(zhí)行計(jì)劃。
7
/7
MySQL沒(méi)有SQL級(jí)并行、HashJoin、分析函數(shù)等特性,處理復(fù)雜SQL能力不強(qiáng);在高并發(fā)的系統(tǒng)中,復(fù)雜SQL容易產(chǎn)生鎖問(wèn)題。