mysql索引失效

没有查询条件,或者查询条件没有建立索引

在查询条件上没有使用引导列

查询的数量是大表的大部分,应该是30%以上。

索引本身失效

查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*,/,! 等) 错误的例子:select * from test where id-1=9; 正确的例子:select * from test where id=10; 需要建立函数索引.

如果 MySQL 使用全表扫描要比使用索引快,则不会使用到索引

MySQL 中,字符串不加单引号索引会失效。正确写法:select * from t_user where username = 'order';

1,<> 2,单独的>,<,(有时会用到,有时不会)

like "%_" 百分号在前.

单独引用复合索引里非第一位置的索引列.

not in ,not exist.

当索引字段不为 null 时,只有使用 is not null 返回的结果集中只包含索引字段时,才使用索引;

当索引字段为 null 时候,使用 is null 不影响覆盖索引,但是使用 is not null 只有完全返回索引字段时才会使用索引

联合索引 is not null 只要在建立的索引列(不分先后)都会走, in null时 必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,其他建立索引的列可以是is null(但必须在所有列 都满足is null的时候),或者=一个值; 当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),以上两种情况索引都会走。其他情况不会走。

MySQL 中,如果条件中有 or,即使其中有条件带索引也不会使用(这也是为什么尽量少用 or 的原因)。要想使用 or,又想让索引生效,只能将 or 条件中的每个列都加上索引

你可能感兴趣的:(mysql索引失效)