您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页mysql 索引失效、联合索引失效场景和举例

mysql 索引失效、联合索引失效场景和举例

来源:爱问旅游网

索引失效

假设有一张user 表,表中包含索引
(id);
(name);
(birthday);
(name,age);

select name from user where year(birthday) = '2000';
  1. 使用模糊查询,查询中使用通配符
select name from user where name like '%益达%';
  1. 使用is null 或者 is not null
select name from user where name is null;
  1. 使用查询条件时,字段类型和索引类型不一致,假设原表中的索引为 integer.
select name from user where CAST(id AS CHAR) = '1';

联合索引失效

  1. 使用的查询条件没有命中联合索引最左边的索引(name,age)
select name from user where age > 10;
  1. 查询中使用了函数
select name from user where UPPER(name)='yida' and age>10;
  1. 查询中使用的数据类型和联合索引的字段类型不一致
select name from user where name = 'yida' and age > '10';
  1. 使用联合索引时,查询条件的顺序和索引的顺序不一致
select name from user where age >12 and name = 'yida';
  1. 复合索引列的离散值过大,mysql 会优先走全表扫描;

解决措施

  1. 确保查询条件中至少包含联合索引的第一列。

  2. 确保查询条件中的索引列类型和联合索引列类型一致。

  3. 将索引列类型进行显式转换,以避免隐式转换导致的索引失效问题。

  4. 确保查询条件中的索引列顺序和联合索引列顺序一致。

  5. 避免在查询条件中使用函数,或者尽可能减少函数的使用。

  6. 重新设计索引,或者将查询拆分为多个查询,以避免数据分布不均匀导致的索引失效问题。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务