MySQL Tidb索引失效情况

MySQL 中的索引失效情况

  1. 数据类型不匹配

    查询条件中的数据类型与索引列的数据类型不一致时,MySQL 可能无法利用索引。例如,索引列为整数类型,而查询条件使用字符串类型。
  2. 使用函数或表达式

    当查询条件中使用函数或表达式时,MySQL 可能会导致索引失效。例如:
    • SELECT * FROM employees WHERE YEAR(hire_date) = 2023;
    • 在此查询中,YEAR(hire_date) 是一个函数调用,无法直接利用索引。
  3. LIKE 查询中的前缀

    • 使用 LIKE 查询时,如果前面有通配符 %,则索引将失效。例如:
      SELECT * FROM employees WHERE name LIKE '%John';
  4. 不满足最左匹配原则

    • 在组合索引中,如果查询条件没有按照索引定义的顺序进行匹配,将导致索引失效。例如:

      sql

      SELECT * FROM employees WHERE age = 30 AND salary = 5000;
    • 如果索引是 (salary, age),则上述查询将无法利用索引。
  5. 使用 OR 关键字

    • 查询中如果使用了 OR 关键字,可能会导致索引失效。例如:

      sql

      SELECT * FROM employees WHERE department_id = 10 OR name = 'John';
  6. 使用 IN 关键字

    • 对于 IN 操作符,如果其中的元素较多,MySQL 可能会选择不使用索引。例如:

      sql

      SELECT * FROM employees WHERE department_id IN (1, 2, 3, ..., 100);
  7. 不合理的索引设计

    • 索引的设计不合理也会导致索引失效,例如索引列的选择性低,或者组合索引中的字段顺序不当。
  8. 统计信息不准确

    • MySQL 在执行查询时会使用统计信息来决定是否使用索引。如果统计信息不准确,可能导致 MySQL 错误地判断索引的使用情况。

TiDB 中的索引失效情况

  1. 数据类型不匹配

    • 与 MySQL 类似,TiDB 中查询条件的数据类型与索引列的数据类型不一致时,索引可能失效。
  2. 使用函数或表达式

    • 在 TiDB 中,使用函数或表达式的查询条件同样会导致索引失效。例如:
      SELECT * FROM employees WHERE DATE(hire_date) = '2023-01-01';
  3. LIKE 查询中的前缀

    • TiDB 中也存在类似问题,使用 % 前缀的 LIKE 查询会导致索引失效。
  4. 不满足最左匹配原则

    • TiDB 对组合索引的最左匹配原则也适用,查询条件未按索引顺序匹配会导致索引失效。
  5. 使用 OR 关键字

    • TiDB 中的 OR 关键字也可能导致索引失效,尤其是当 OR 的条件中混合了有索引和没有索引的列时。
  6. 使用 IN 关键字

    • TiDB 在处理大量 IN 条件时,可能会选择不使用索引,导致全表扫描。
  7. 不合理的索引设计

    • TiDB 索引设计不合理,如选择性低或字段顺序不当,也会导致索引失效。
  8. 统计信息不准确

    • TiDB 也依赖统计信息来优化查询,如果统计信息不准确,可能导致错误的索引选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值