索引不生效问题的分享

2022-08-07 14:08:54

说到数据库大家都对索引不是很陌生,大家也都基本上知道怎么建立索引,索引不生效的原因。常见的索引不生效的原因有如下几个原因:

  1. 没有遵从最左原则
  2. 索引字段使用了is null,is not null
  3. 索引字段使用了like
  4. sql语句中使用了 or ,那么or 前的条件中的列有索引,而后面的列索引都不会被用到
  5. 如果列类型是字符串,在 where 条件中把字符常量值用引号引起来,否则索引失效
  6. 。。。。。
    还有很多失效的原因。但是呢,之前我碰到一种情况,假设我有一张表,三个字段,id,a,b,建立了两个索引,一个index(a),一个index(b),我有一条sql是这样的
 select id,a,b from t where a = 1

其实这条sql的话正常的话应该是可以直接使用index(a)的但是我的这个数据库并没有使用这个索引。按照现在这个思路,肯定不是索引的问题而是数据库用错了索引。
在网上找到了一个force index这个,可以强制sql语句使用哪个固定的索引。sql语句如下:

 select id,a,b from t forceindex(a) where a = 1

使用explain去看确实使用了index(a)。这要是平时练习这么做法是可以的,但是其实开发中这个是不建议的。
后来我采用的一种新的方法是使用Analyze Table语句来修复索引。

Analyze Table  tableName

我的操作可能导致我的索引的统计信息出现了错误,所以导致我的索引失效了,具体更深的我还在学习,为什么没有放图片呢,因为我的本地的mysql今天突然起不来了,难受,等恢复了再来放图片。

  • 作者:syr1136877833
  • 原文链接:https://blog.csdn.net/syr1136877833/article/details/104948035
    更新时间:2022-08-07 14:08:54