為什么會出現(xiàn)選錯索引
優(yōu)化器會判定當(dāng)前執(zhí)行的最優(yōu)方式括丁,主要包括考慮掃描的行數(shù)、是否使用臨時表、是否需要排序等仰税;
優(yōu)化器的邏輯
??掃描行數(shù)是優(yōu)化器考慮的指標(biāo)之一抽诉,那掃描的行數(shù)從哪來?基于采樣統(tǒng)計河绽,即這個統(tǒng)計信息就是索引的“區(qū)分度”唉窃。顯然,一個索引上不同的值越多苟跪,這個索引的區(qū)分度就越好蔓涧。而一個索引上不同的值的個數(shù),我們稱之為“基數(shù)”(cardinality)元暴。也就是說,這個基數(shù)越大鉴未,索引的區(qū)分度越好援岩。
??但是,采樣會導(dǎo)致統(tǒng)計數(shù)據(jù)不準(zhǔn)確羽峰,通過show index from table看下基數(shù)統(tǒng)計信息添瓷,為了解決統(tǒng)計信息不對,可通過analyze table t 命令修正坯汤,用來重新統(tǒng)計索引信息搀愧。
問題如何解決
??當(dāng)出現(xiàn)索引選錯的情況下疆偿,可以根據(jù)explain看下sql執(zhí)行情況搓幌。對于索引選錯的時候:1是可以使用force index進(jìn)行強制走索引,2是可以考慮修改語句处铛,引導(dǎo) MySQL 使用我們期望的索引拐揭,3是刪除不必要的索引或者增加合適的索引