2010-05-11 8 views
2

where 절에 여러 regexp가있는 쿼리가 있습니다. where 절에 포함 된 coloumns는 이미 색인화되어 있습니다. 그러나 쿼리가 인덱스를 사용하고 있지 않습니다. MySql 정규 표현식이 인덱스를 사용합니까? 그렇지 않은 경우이 문제를 해결할 수있는 방법은 무엇입니까?MySQL 정규식 인덱스

답변

4

아니요, 정규 표현식 조회는 색인을 사용할 수 없습니다. 정규식을 적용하는 것이 인덱스라면, 조금 더 빨라질 수도 있지만, 본질적으로 테이블 스캔입니다.

제가 알고있는 유일한 해결책은 RLIKE 'foo.*' 대신 LIKE 'foo%' 대신 정규식을 사용하는 것입니다. 해당 열의 색인은 LIKE를 사용할 수 있지만 RLIKE는 사용할 수 없습니다.

+0

감사 데이빗. 이것은 정확하게 내가 확인하고 싶은 것입니다 .. 그러나, 'LIKE'로 이미 일했습니다. 제 문제는 제가 양쪽에서 검색하고 싶다는 것입니다. 시험은 현장의 어느 위치 에나있을 수 있습니다. 그래서 쿼리는 LIKE '% foo %'입니다. 이런 경우 인덱스를 작동시키는 방법이 있습니까? 감사합니다. Vivek – Vivek

+1

정확합니다. LIKE "상수 %"를 사용하여 범위를 좁힐 수 있다면, 그 절은 인덱스를 사용하여 결과를 이미 좁힐 수 있습니다. – Konerak

+1

@Vivek 불행히도 없습니다. 그것이 밝혀 졌을 때, 저는 최근에 똑같은 일을하고있었습니다. 인덱스가 그것을 도울 수 없기 때문에'LIKE '% foo %'의 결과를 영리하게 캐쉬하려고했습니다. –