mysql in or索引失效_in 索引失效的问题
簡(jiǎn)單的in查詢(xún) 索引失效:
步驟
1、檢查建立索引沒(méi)有
order_status 字段為普通索引的tinyint類(lèi)型
2、檢查是否使用了使索引失效的語(yǔ)句
3、explain查看執(zhí)行計(jì)劃
而 in(1)時(shí)會(huì)走索引
5、查看是否關(guān)閉的全局的索引(Comment顯示disabled則表示關(guān)閉了索引)
SHOW KEYS FROM wy_order;
關(guān)閉:ALTER TABLE `wy_order` DISABLE KEYS ;
開(kāi)啟:ALTER TABLE `wy_order` ENABLE KEYS;
還找不到原因。。
難道是mysql查詢(xún)優(yōu)化器認(rèn)為全表掃描時(shí)如果速度大于使用索引,就會(huì)不用索引
此外,查看索引的使用情況
show status like ‘Handler_read%';
注意:
handler_read_key:這個(gè)值越高越好,越高表示使用索引查詢(xún)到的次數(shù)
handler_read_rnd_next:這個(gè)值越高,說(shuō)明查詢(xún)低效
那么使用強(qiáng)制索引呢
強(qiáng)制索引是生效的,求大佬告知(是mysql查詢(xún)優(yōu)化器認(rèn)為全表掃描時(shí)如果速度大于使用索引,就會(huì)不用索引)是不是我猜想的這樣呀
補(bǔ)充:索引失效
不走索引的情況,1)被查詢(xún)出來(lái)的數(shù)據(jù)超過(guò)一定比例的時(shí)候,譬如表里有1000萬(wàn)條記錄,一條SQL查的結(jié)果有600萬(wàn),肯定不會(huì)走索引了2)索引列上用了函數(shù)的時(shí)候,例如where to_char(id) = ...
3)索引列上發(fā)生類(lèi)型轉(zhuǎn)換的時(shí)候,如number列你偏寫(xiě)成where col = '1',加了引號(hào)4)沒(méi)有收集統(tǒng)計(jì)信息的時(shí)候,CBO是生成執(zhí)行計(jì)劃是要看統(tǒng)計(jì)信息的,在oracle 9i時(shí),統(tǒng)計(jì)信息不是自動(dòng)收集的,有沒(méi)有碰到這樣的情況:一條SQL一直正常,某天突然很慢很慢,一般就是統(tǒng)計(jì)信息沒(méi)有收集的原因。5)強(qiáng)制全表掃描的時(shí)候6)索引失效的時(shí)候 使用+ - * / ! 等運(yùn)算符號(hào) 使用 <> 、not in 、not exist、!=
like "%_" 百分號(hào)在前(可采用在建立索引時(shí)用reverse(columnName)這種方法處理)
單獨(dú)引用復(fù)合索引里非第一位置的索引列.應(yīng)總是使用索引的第一個(gè)列,如果索引是建立在多個(gè)列上, 只有在它的第一個(gè)列被where子句引用時(shí),優(yōu)化器才會(huì)選擇使用該索引
當(dāng)變量采用的是times變量,而表的字段采用的是date變量時(shí).或相反情況
索引列存在null7)復(fù)合索引時(shí),謂詞非前導(dǎo)列的時(shí)候
總結(jié)
以上是生活随笔為你收集整理的mysql in or索引失效_in 索引失效的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 日志 php_高性能的PHP日志系统 S
- 下一篇: mysql 插入 删除_mysql插入、