一、什么叫做索引失效索引失效是指查询时因为写法或条件的问题数据库用不上或只用上一部分已有的索引导致加速能力丧失退化成全表扫描或逐行过滤。数据照样查得出来结果也对只是变慢了。二、什么情况下会导致索引失效前置知识最左列与最右列最左列写在联合索引定义里最前面的那一列就是最左列。最右列写在联合索引定义里最后面的那一列就是最右列。CREATE INDEX idx ON table_name (a, b, c);在以上例子中a就是最左列c就是最右列1、违反了最左前缀法则索引会失效或部分失效。如果建立了联合索引查询就必须从最左列开始、连续地使用才能让索引充分发挥作用。如果从最左列开始但中间跳跃了某一列那么只有跳跃点之前的那些连续列能生效跳跃点及之后的列都用不上。CREATE INDEX idx_a_b_c ON table_name (a, b, c);完全失效SELECT * FROM table_name WHERE b 2;部分失效只有a生效SELECT * FROM table_name WHERE a 1 AND c 3;只有 a 、b生效 cd用不上CREATE INDEX idx_a_b_c_d ON table_name (a, b, c, d); SELECT * FROM table_name WHERE a 1 AND b 2 AND d 4;2、范围查询右边的列不能用索引快速定位只能做普通过滤。如以下例子范围查询右边的列也就是 c没有使用到索引CREATE INDEX idx_a_b_c ON table_name (a, b, c);WHERE a 1 AND b 2 AND c 33、在索引列上进行运算操作索引会失效4、当索引列是字符串类型而查询时传入的是数字不加单引号MySQL 会对索引列做隐式类型转换导致索引失效。5、以 % 开头的 Like 模糊查询索引失效。如果仅仅是尾部模糊匹配索引不会失效。如果是头部模糊匹配索引失效