MySQL-索引可能失效场景

1、where子句的查询条件里有where(column!=XXX),MySQL将无法使用索引;

2、where子句的查询条件中使用了函数,MySQL将无法使用索引;

3、如果条件有or,即使其中有条件带索引也不会使用(这也是为什么建议少使用or的原因),如果想使用or,又想索引有效,只能将or条件中的每个列加上索引;

4、对于多列索引,不是使用的第一部分,则不会使用索引;

5、like查询以%开头;

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

7、如果MySQL估计使用全表扫描要比索引快,则不使用索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,索引可能在以下情况下失效: 1. 不使用索引列进行查询:当查询中没有使用索引列,或者使用了函数对索引列进行了操作(如使用了函数或表达式),索引将无法发挥作用,查询将退化为全表扫描。 2. 过滤条件不可用索引:当查询中的过滤条件无法使用索引来加速查询时,索引失效。例如,使用了不等于(<>)、不包含(NOT IN)等操作符,或者使用了模糊查询(如使用了通配符%)。 3. 数据类型不匹配:当索引列的数据类型与查询条件的数据类型不匹配时,索引可能失效。比如,索引列为字符串类型,但查询条件使用了数字类型。 4. 统计信息不准确:MySQL的优化器使用统计信息来评估查询计划,如果统计信息不准确或过期,优化器可能会错误地选择全表扫描而不是使用索引。 5. 索引列上存在函数或表达式:当索引列上存在函数或表达式时,索引可能失效。例如,在索引列上使用了函数或表达式进行计算。 6. 多列索引顺序不匹配:当查询条件与多列索引的顺序不匹配时,索引可能失效。多列索引的顺序非常重要,只有当查询条件按照索引的顺序进行匹配时,索引才能发挥作用。 7. 索引列数据分布不均匀:如果索引列的数据分布不均匀,即某些值的出现频率远高于其他值,那么索引可能失效。因为MySQL在查询时会根据索引的选择性来判断是否使用索引,选择性越高,索引的效果越好。 以上是一些可能导致MySQL索引失效场景,针对不同的情况,可以通过优化查询语句、调整索引设计、更新统计信息等方法来解决索引失效的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值