mysql優(yōu)化 - 關(guān)于mysql查詢(xún)時(shí)索引失效及掃描行數(shù)大于數(shù)據(jù)總行數(shù)的疑問(wèn)。
問(wèn)題描述
對(duì)比前兩條語(yǔ)句,第二條沒(méi)有使用索引,我記得是掃描行數(shù)達(dá)到一定行數(shù)時(shí)會(huì)放棄使用索引,這個(gè)臨界值是多少呢?
全表掃描是顯示掃描行數(shù)是 70341 行,而數(shù)據(jù)總行數(shù)卻只有 57087 行?
select count(*) 使用了索引,但是也掃描了 70341 行,這個(gè)語(yǔ)句會(huì)產(chǎn)生性能問(wèn)題嗎?
問(wèn)題解答
回答1:CBO優(yōu)化機(jī)制的數(shù)據(jù)庫(kù)中,沒(méi)有明確的使用或不適用索引的臨界值,以執(zhí)行計(jì)劃中的COST最小為標(biāo)準(zhǔn),經(jīng)驗(yàn)值是取表總行數(shù)小于5%的時(shí)候用索引比較合適。
我理解第二個(gè)語(yǔ)句使用的是表的統(tǒng)計(jì)數(shù)據(jù),如果表最近發(fā)生過(guò)比較大的變更,統(tǒng)計(jì)數(shù)據(jù)有沒(méi)有及時(shí)更新,會(huì)出現(xiàn)兩者偏差較大的情況。
count(*)使用了索引,說(shuō)明update_at字段有NOT NULL的定義,相比較全表掃描,掃描索引的成本會(huì)更低一些。
相關(guān)文章:
1. angular.js - angularjs的自定義過(guò)濾器如何給文字加顏色?2. angular.js - angular內(nèi)容過(guò)長(zhǎng)展開(kāi)收起效果3. 關(guān)于docker下的nginx壓力測(cè)試4. docker鏡像push報(bào)錯(cuò)5. 關(guān)于nginx location配置的問(wèn)題,root到底是什么6. linux - openSUSE 上,如何使用 QQ?7. 并發(fā)模型 - python將進(jìn)程池放在裝飾器里為什么不生效也沒(méi)報(bào)錯(cuò)8. 大家好,請(qǐng)問(wèn)在python腳本中怎么用virtualenv激活指定的環(huán)境?9. python的前景到底有大?如果不考慮數(shù)據(jù)挖掘,機(jī)器學(xué)習(xí)這塊?10. linux - 升級(jí)到Python3.6后GDB無(wú)法正常運(yùn)行?
