sql语法中,为什么 like ‘%张三’索引会失效?表A中字段a上有索引indexa,查询语句使用
select 列 from A where a like '%张三'   时会出现索引失效的情况?
like语法中 like '%张三'索引失效,like '张三%'索引正常?
请问一下原因

解决方案 »

  1.   

    以MySQL为例,字段a上的索引实际上是B-Tree索引;B-Tree索引可以用于like查询,但要求like后面为一个不能以%开头的常量字符串。
    因此,select 列 from A where a like '%张三'   时会出现索引失效的情况。可以参见官方文档:
    https://dev.mysql.com/doc/refman/8.0/en/index-btree-hash.html
      

  2.   

    索引其实就是排序,或者说排队更直观。
    like '张三%',实际你要找的是'张三XXX',只要把所有'张三'开头的那部分内容返回即可,这部分是连续的,不需要全表扫描。
    like '%张三',实际你要找的是'XXX张三',这部分在索引里是不连续的,如果要返回需要的结果,只能全表扫描。