mysql LIKE带参数的where子句不使用索引

时间:2015-01-21 02:47:20

标签: mysql

在我的测试中,带有where子句的mysql select语句包含与参数比较的LIKE,不会使用索引。完成全表扫描并且性能受损。例如

set @gp1:= 'BOB%';
select * from quote where quoteNum like @gp1; -- this is slow

如果值是内联的,则使用索引。例如

select * from quote  where quoteNum like 'BOB%'; -- this is fast

有没有办法强制mysql在第一个例子中使用索引?

2 个答案:

答案 0 :(得分:4)

变量的字符集和排序规则必须与要运行的查询的列相同。

SET character_set_connection = latin1;
SET collation_connection = latin1_swedish_ci;
set @gp1:= 'BOB%';
select * from quote where quoteNum like @gp1; -- this is fast now

这个答案正在处理类似的问题。 https://stackoverflow.com/a/15032843/176868

答案 1 :(得分:2)

跟随力量指数...


SELECT * FROM employee USE INDEX (emp_name_index)
  WHERE emp_name like 'white%';