該執(zhí)行計劃是線上一個查詢語句(select count(*) from table WHERE note_type = 1 and subject_code = 'register' and is_used = 1 and create_time like '2022-03-10%' )
三個字短分別建立了索引
根據(jù)查詢計劃顯示可以知道進(jìn)行了索引合并,于是分別把三個索引刪除朦促,創(chuàng)建了一個聯(lián)合索引順序為: (note_type,subject_code,is_used)。索引創(chuàng)建好后 查看執(zhí)行計劃 索引的合并問題解決了,但是掃描的行數(shù)反更多了,但是依然走了索引抄谐。為什么會這樣呢戚绕?
經(jīng)過對數(shù)據(jù)的分析發(fā)現(xiàn)這三個字短的區(qū)分度不是很高 所以掃描了大部分?jǐn)?shù)據(jù),但是依然走了索引记某。
既然已經(jīng)知道了原因,那也就好解決了构捡,現(xiàn)按照日期進(jìn)行查詢 在按照其他條件查詢液南,把創(chuàng)建的聯(lián)合索引刪除,然后重新創(chuàng)建(create_time,note_type,subject_code,is_used)按照這個順序創(chuàng)建好勾徽,再次執(zhí)行以上SQL:
select count() from table WHERE create_time like '2022-03-10%' and note_type = 1 and subject_code = 'register' and is_used = 1.
查看執(zhí)行計劃:發(fā)現(xiàn)掃描的行數(shù)變少了滑凉,但是 執(zhí)行計劃的索引類型:是index 說明效率還不是很高,繼續(xù)優(yōu)化
那怎么優(yōu)化呢喘帚?
經(jīng)過分析和測試發(fā)現(xiàn) 是 like 模糊查詢導(dǎo)致 畅姊,但是依然走了索引 只是這種效率不高。然后把模糊查詢 改為范圍查詢: select count() from table WHERE create_time bteween '2022-03-10' and '2022-03-10 23:59:59' and note_type = 1 and subject_code = 'register' and is_used = 1. 查看執(zhí)行計劃發(fā)現(xiàn) 確實生效了 執(zhí)行計劃的 索引類型index->range 這下效率提高了吹由。