내가 최적화하려고하는 MySQL에 대한 쿼리가 있습니다. 인덱스가 있고 1000 개 미만의 고유 값을 가진 varchar 열 x (및 기타 몇 개)가있는 수십만 개의 행이있는 테이블 t가 있습니다. 특정 정규 표현식과 일치하는 모든 구별되는 x를 얻으려고합니다. 이것은이를 공식화하는 정직 방법 :정규식 쿼리 최적화
SELECT DISTINCT x
FROM t
WHERE x REGEXP 'someregexp'
그러나 정규 표현식을 사용하는 경우 MySQL이 완전히 인덱스를 무시하는 것처럼 보인다, 그래서 몇 초 정도 걸립니다. 고유 값이 매우 적기 때문에 쿼리가 인덱스를 사용하여 고유 값을 가져온 다음 정규식을 사용하여 그 결과를 필터링하는 경우이 값을 처리하는 것이 꽤 빠를 것입니다. 그러나 이것이 지금은 그렇지 않은 것 같습니다 그것은 1 초 이내에 실행할 수 있어야하기 때문입니다.
그런 식으로 MySQL 쿼리 최적화 프로그램에 힌트를 줄 수있는 방법이 있습니까? 그것은 단지에 수행해야하는 경우 빠르고 정규 표현식을 (
SELECT d.x
FROM (SELECT DISTINCT x FROM t) d
WHERE d.x REGEXP 'someregexp'
처음 (인덱스 빠르다) 별개의 필터링을 수행해야합니다 이런 식으로 다음을 수행하십시오
는 "색인" -'SHOW CREATE TABLE'을 제공해주세요. –