一文解讀MySQL查詢優(yōu)化技巧
只select用到的字段
select * 會(huì)將用不到的字段也查詢出來(lái),耗費(fèi)內(nèi)存資源。并且不能使用覆蓋索引
盡量使用覆蓋索引
select column1,column2 from user。如果查詢的所有字段都是索引字段,稱為覆蓋索引,覆蓋索引的查詢速度與效率是非常高的。
索引使用要合理
不要在重復(fù)性過(guò)高的字段上使用索引,比如性別這個(gè)字段,加上索引的作用不大。根據(jù)阿里巴巴開(kāi)發(fā)手冊(cè),單表索引要在5個(gè)以內(nèi)。
減少數(shù)據(jù)庫(kù)交互次數(shù)
之前帶實(shí)習(xí)生的時(shí)候,看到過(guò)這種代碼 ,邏輯沒(méi)問(wèn)題,但是磁盤(pán)IO次數(shù)過(guò)多,增加性能消耗

使用limit 1

第一條SQL找到第一條匹配數(shù)據(jù)之后,繼續(xù)掃描下一條數(shù)據(jù),直到所有數(shù)據(jù)表的數(shù)據(jù)掃描一遍。
第二條SQL,加了limit 1之后,找到第一條匹配的數(shù)據(jù)之后,直接返回結(jié)果,停止匹配工作。
limit分頁(yè)優(yōu)化
有時(shí)候業(yè)務(wù)要做數(shù)據(jù)清洗,可能要做分頁(yè)

原SQL,會(huì)查詢10020條數(shù)據(jù),再拋棄前面的10000條數(shù)據(jù),只保留20條。而優(yōu)化后的SQL,會(huì)直接從10001數(shù)據(jù)查起,取20條數(shù)據(jù)。
避免左模糊匹配

Union替換OR語(yǔ)句

In與Exists的使用

謹(jǐn)慎使用MySQL查詢緩存
查詢緩存在MySQL在4.0提出,MySQL8之后又移除。但是大部分公司還在使用MySQL5.7,還是有這一項(xiàng)功能的。查詢緩存默認(rèn)是處于關(guān)閉狀態(tài)的,需要手動(dòng)修改配置文件,重啟才能生效。開(kāi)啟查詢緩存后,SQL第一次執(zhí)行后會(huì)將數(shù)據(jù)緩存到內(nèi)存中,第二次查詢直接從內(nèi)存讀取。但是存在以下缺點(diǎn):
緩存命中率不高,任何對(duì)于表結(jié)構(gòu)與數(shù)據(jù)的更新操作都會(huì)讓緩存失效。兩次查詢的SQL需要完全匹配,連大小寫(xiě)都需要一致。根據(jù)官方的測(cè)試,開(kāi)啟緩存后針對(duì)一個(gè)表進(jìn)行簡(jiǎn)單查詢,每次查的都不一樣,結(jié)果性能降低13%。這個(gè)是個(gè)用的好,提升性能,用不好會(huì)坑自己的方法。
