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. windows誤人子弟啊2. mysql優(yōu)化 - MySQL如何為配置表建立索引?3. 實(shí)現(xiàn)bing搜索工具urlAPI提交4. 關(guān)于mysql聯(lián)合查詢(xún)一對(duì)多的顯示結(jié)果問(wèn)題5. 數(shù)據(jù)庫(kù) - Mysql的存儲(chǔ)過(guò)程真的是個(gè)坑!求助下面的存儲(chǔ)過(guò)程哪里錯(cuò)啦,實(shí)在是找不到哪里的問(wèn)題了。6. 我在網(wǎng)址中輸入localhost/abc.php顯示的是not found是為什么呢?7. 如何用筆記本上的apache做微信開(kāi)發(fā)的服務(wù)器8. python - linux怎么在每天的凌晨2點(diǎn)執(zhí)行一次這個(gè)log.py文件9. MySQL主鍵沖突時(shí)的更新操作和替換操作在功能上有什么差別(如圖)10. 冒昧問(wèn)一下,我這php代碼哪里出錯(cuò)了???
