필자의 테스트에서, 매개 변수와 비교되는 LIKE를 포함하는 where 절이있는 mysql select 문은 인덱스를 사용하지 않습니다. 전체 테이블 스캔이 완료되고 성능이 저하됩니다. 예 :매개 변수가있는 mysql LIKE where 절은 인덱스를 사용하지 않습니다.
set @gp1:= 'BOB%';
select * from quote where quoteNum like @gp1; -- this is slow
값이 인라인되면 색인이 사용됩니다. 예 :
select * from quote where quoteNum like 'BOB%'; -- this is fast
첫 번째 예제에서 mysql이 인덱스를 사용하도록 강제 할 수 있습니까?
작동하지 않습니다. "set @ gp1 : = 'JDV21501008 %'의 출력은 quote use index (quoteNum)에서 select *를 설명합니다. 여기서 quoteNum은 @ gp1과 같습니다." 전체 테이블 스캔을 보여줍니다. –
명확하게하려면 예제가 작동하지만 매개 변수화 된 쿼리를위한 솔루션이 필요하며 솔루션이 해당 쿼리에 적합하지 않습니다. –
아쉽게도 WHERE 절의 변수 값은 인덱스를 선택하는 데 사용되지 않으므로 올바른 인덱스를 돕기 위해 'USE INDEX'를 사용해야합니다. 이것은 SQL Server에서와 동일합니다. mysql에 어떤 인덱스를 사용해야하는지 "알리는"문제는 무엇입니까? – i486