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

带参数的类似mysql的where子句不使用索引,mysql,Mysql,在我的测试中,带有where子句的mysql select语句不使用索引,where子句包含一个与参数进行比较的LIKE。完成全表扫描后,性能会受到影响。e、 g set @gp1:= 'BOB%'; select * from quote where quoteNum like @gp1; -- this is slow 如果值是内联的,则使用索引。e、 g select * from quote where quoteNum like 'BOB%'; -- this is fast 在

在我的测试中,带有where子句的mysql select语句不使用索引,where子句包含一个与参数进行比较的LIKE。完成全表扫描后,性能会受到影响。e、 g

set @gp1:= 'BOB%';
select * from quote where quoteNum like @gp1; -- this is slow
如果值是内联的,则使用索引。e、 g

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

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

下面的强制索引


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

变量的字符集和排序规则必须与列相同,查询才能工作

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

这个答案正处理一个类似的问题

不起作用。set@gp1的输出:=“jdv215008%”;解释select*from quote use indexquoteNum,其中quoteNum类似于@gp1;显示了一个完整的表扫描。要清楚,您的示例确实有效,但我需要一个用于参数化查询的解决方案,而您的解决方案不适用于此。不幸的是,WHERE子句中的变量值不用于选择索引,您必须使用use INDEX来帮助创建正确的索引。在SQL Server中也是如此。告诉mysql必须使用哪个索引有什么问题?即使使用use index或FORCE index,查询的参数化版本也不使用索引。这就是问题所在。