본문 바로가기
MySql

MySQL innoDB에서 MySQL LIKE '% string %'쿼리 최적화

by 베이스 공부 2021. 2. 14.
반응형

이 테이블을 가지고 :

CREATE TABLE `example` (
`id` int(11) unsigned NOT NULL auto_increment,
`keywords` varchar(200) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

다음 쿼리를 최적화하고 싶습니다.

SELECT id FROM example WHERE keywords LIKE '%whatever%'

테이블은 InnoDB입니다 (현재 FULLTEXT가 아님) 이러한 쿼리를 최적화하기 위해 사용하는 가장 좋은 인덱스는 무엇입니까?

우리는 간단한 시도를했습니다.

ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);

하지만 Explain 쿼리는 전체 테이블 을 스캔해야 함을 보여줍니다. LIKE 'whatever %'대신 쿼리하면이 인덱스는 잘 작동하지만 그렇지 않으면 값이 없습니다.

어쨌든 이것을 innoDB에 최적화 할 수 있습니까?

감사!

 

해결 방법

 

인덱스는 문자열의 시작부터 끝까지 작성됩니다. LIKE 'whatever %' 유형 절을 사용하면 MySQL은 이러한 시작 기반 색인을 사용하여 whatever 를 매우 빠르게 찾을 수 있습니다.

그러나 LIKE '% whatever %'로 전환하면 문자열 시작 부분의 앵커가 제거됩니다. 이제 검색 용어가 더 이상 문자열의 시작 부분에 고정되지 않기 때문에 시작 기반 인덱스를 사용할 수 없습니다. 중간 어딘가에 "부동"하고 전체 필드가 ​​검색되어야합니다. 모든 LIKE '% ... 쿼리는 인덱스를 사용할 수 없습니다.

그렇기 때문에 수행중인 모든 작업이 '부동'검색 인 경우 전체 텍스트 인덱스를 사용하는 이유입니다. 이러한 유형의 사용을 위해 설계 되었기 때문입니다.


 

참조 페이지 https://stackoverflow.com/questions/10354248

 

 

반응형

댓글