반응형
MATCH AGAINST 또는 LIKE 중 어떤 SQL 쿼리가 더 낫습니까?
데이터베이스에서 "foo_desc"및 "bar_desc"열에 "foo"및 "bar"키워드가 모두있는 행을 검색하려면 다음과 같이합니다.
SELECT *
FROM t1
WHERE MATCH (t1.foo_desc, t2.bar_desc) AGAINST ('+foo* +bar*' IN BOOLEAN MODE)
또는
SELECT *
FROM t1
WHERE (CONCAT(t1.foo_desc, t2.bar_desc) LIKE '%foo%') AND (CONCAT(t1.foo_desc, t2.bar_desc) LIKE '%bar%')
마지막 쿼리의 단점은 성능입니다.
장점은 LIKE 쿼리가 MATCH AGAINST가없는 'xxfoo'를 찾는다는 것입니다.
어느 것이 선호되거나 더 나은 솔루션이 있습니까?
최신 정보
현재로 MySQL 5.6이상 InnoDB테이블 지원 Match... Against.
첫 번째가 훨씬 낫습니다. 에서 의 MyISAM 테이블은 그 컬럼에 대한 전체 텍스트 인덱스를 사용합니다. 다른 하나는 모든 행에서 연결을 수행 한 다음 비교를 수행하여 전체 테이블 스캔을 수행합니다.
LIKE 다음과 같은 경우에만 효율적입니다.
- 열 (특정 데이터베이스 공급 업체가 기능 색인 (예 : Oracle)을 지원하고이를 사용하지 않는 한 기능의 결과가 아님)
- 열의 시작 (즉
LIKE 'blah%', 반대LIKE '%blah%') 과 - 인덱싱 된 열.
이러한 조건 중 하나라도 참이 아닌 경우 SQL 엔진이 쿼리를 실행하는 유일한 방법은 전체 테이블 스캔을 수행하는 것입니다. 이것은 약 10 ~ 2 만 행에서 사용할 수 있습니다. 그 이상은 금방 사용할 수 없게됩니다.
참고 : MySQL에서 MATCH의 한 가지 문제점은 전체 단어에 대해서만 일치하는 것처럼 보이므로 'bla'검색은 'blah'값이있는 열과 일치하지 않지만 'bla *'검색은 일치한다는 것입니다.
참고 URL : https://stackoverflow.com/questions/792875/which-sql-query-is-better-match-against-or-like
반응형
'Nice programing' 카테고리의 다른 글
| iPhone / iOS : 우편 번호 용 HTML 5 키보드 제시 (0) | 2020.11.15 |
|---|---|
| Android의 ListView에 이미지 목록을 표시하는 방법은 무엇입니까? (0) | 2020.11.15 |
| JSON 구조 문서화를위한 구문 (0) | 2020.11.15 |
| AngularJS를 사용한 인증, REST Api WS를 사용한 세션 관리 및 보안 문제 (0) | 2020.11.15 |
| ASP.NET MVC 컨트롤러의 수명은 얼마입니까? (0) | 2020.11.15 |