반응형
이 테이블을 가지고 :
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
반응형
'MySql' 카테고리의 다른 글
MySQL 임시 테이블을 만들고 선택 (0) | 2021.02.14 |
---|---|
MySQL MYSQL-행 크기 제한 인 66KB를 해결하는 방법 (0) | 2021.02.14 |
MySQL PHP 객관식 퀴즈 작성자 (0) | 2021.02.14 |
MySQL 트리거 '열에 대한 업데이트'구문 (0) | 2021.02.14 |
MySQL 느린 MySQL 성능 및 절전 쿼리 (0) | 2021.02.14 |
댓글