索引不生效问题的分享

3 篇文章 0 订阅

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

  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今天突然起不来了,难受,等恢复了再来放图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值