简单的in查询 索引失效:

步骤

1、检查建立索引没有

order_status 字段为普通索引的tinyint类型

2、检查是否使用了使索引失效的语句

3、explain查看执行计划

mysql in 索引 mysql in or 索引_字段

而 in(1)时会走索引

mysql in 索引 mysql in or 索引_mysql in or索引失效_02

5、查看是否关闭的全局的索引(Comment显示disabled则表示关闭了索引)

SHOW KEYS FROM wy_order;

关闭:ALTER TABLE `wy_order` DISABLE KEYS ;

开启:ALTER TABLE `wy_order` ENABLE KEYS;

还找不到原因。。

难道是mysql查询优化器认为全表扫描时如果速度大于使用索引,就会不用索引

此外,查看索引的使用情况

show status like ‘Handler_read%';

注意:

handler_read_key:这个值越高越好,越高表示使用索引查询到的次数

handler_read_rnd_next:这个值越高,说明查询低效

那么使用强制索引呢

mysql in 索引 mysql in or 索引_字段_03

强制索引是生效的,求大佬告知(是mysql查询优化器认为全表扫描时如果速度大于使用索引,就会不用索引)是不是我猜想的这样呀

补充:索引失效

不走索引的情况,1)被查询出来的数据超过一定比例的时候,譬如表里有1000万条记录,一条SQL查的结果有600万,肯定不会走索引了2)索引列上用了函数的时候,例如where to_char(id) = ...

3)索引列上发生类型转换的时候,如number列你偏写成where col = '1',加了引号4)没有收集统计信息的时候,CBO是生成执行计划是要看统计信息的,在oracle 9i时,统计信息不是自动收集的,有没有碰到这样的情况:一条SQL一直正常,某天突然很慢很慢,一般就是统计信息没有收集的原因。5)强制全表扫描的时候6)索引失效的时候 使用+ - * / ! 等运算符号 使用 <> 、not in 、not exist、!=

like "%_" 百分号在前(可采用在建立索引时用reverse(columnName)这种方法处理)

单独引用复合索引里非第一位置的索引列.应总是使用索引的第一个列,如果索引是建立在多个列上, 只有在它的第一个列被where子句引用时,优化器才会选择使用该索引

当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况

索引列存在null7)复合索引时,谓词非前导列的时候