索引在哪些情况下会失效?

1、如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)
索引在哪些情况下会失效?_第1张图片
注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

2、3.like查询是以%开头,可以是%结束,例如 name like ‘张%’,这种情况索引不会失效。

3、如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。

4、在MYSQL使用不等于(<,>,!=)的时候无法使用索引,会导致索引失效。

5、is null或者is not null 也会导致无法使用索引。

6、不在索引列上做任何操作(计算,函数,(自动或者手动)类型装换),会导致索引失效而导致全表扫描。

什么情况下不推荐使用索引?

1、数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引

比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。

2、 频繁更新的字段不要使用索引

比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。

3、字段不在where语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引

只有在where语句出现,mysql才会去使用索引

4、where 子句里对索引列使用不等于(<>),使用索引效果一般

我们可以用explain来分析sql语句使用的索引情况,其中key就是显示我们使用的索引情况。详细请阅读: MySQL Explain详解.

你可能感兴趣的:(数据库,mysql,sql)