如题,语句是这样子的:explain select * from m_service_message s where s.service_id LIKE '/88BA9880-D071-482E-817B-425A6A9D6DDD%'; 索引没有命中

解决方案 »

  1.   


    如果把like改为 =,索引是可以命中的,说明是like的原因,索引应该没问题。这个id的记录在表里占了60%左右,请问这种问题要怎么处理?
      

  2.   

    s.service_id LIKE '/88BA9880-D071-482E-817B-425A6A9D6DDD%'; 这个条件估算一下大概会有多少记录满足条件,如果达到 30% 则MYSQL不会再使用索引。因为使用索引的开销反而更大。
      

  3.   


    这个条件的记录数有20多万,达到50%左右。需求是要满足模糊查询,请问有好的解决方案吗?没有好的办法。50%的数据,显然使用索引已经没什么意义了。
    试想一下,如果在全班同学中查找所有男生, 哪怕手上有哪一张表按男女排好序的,你也不可以再去先看男女排序表找到学号,再到 花名册表(以学号排序)再找到姓名及其它字段。 MYSQL认为还不如直接在花名册中全表扫描一遍高效。