[SQL] 어떤 SQL 쿼리, 더 나은 MATCH 반대 또는 LIKE입니까?
SQL어떤 SQL 쿼리, 더 나은 MATCH 반대 또는 LIKE입니까?
열 "foo_desc"와, 내가 좋아하는 일을 할 것 "bar_desc"의 모두 키워드 "foo는"AND "바"가 행에 대한 데이터베이스를 검색하려면 :
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%')
나는 마지막 쿼리의 단점은 성능이다 기대합니다.
거꾸로입니다 MATCH 반대하지 않는 LIKE 쿼리의 발견 'xxfoo'.
어느 선호 하나 또는 더 나은 솔루션이있다?
해결법
-
==============================
1.MySQL을 5.6으로 이상 InnoDB 테이블 지원 일치 ...에 대하여.
MySQL을 5.6으로 이상 InnoDB 테이블 지원 일치 ...에 대하여.
첫 번째는 훨씬 낫다. MyISAM 테이블에 그것은 그 컬럼에 대한 전체 텍스트 인덱스를 사용합니다. 다른 하나는 모든 행 다음 비교에 CONCAT을하고 스캔 전체 테이블을 할 것입니다.
당신이에 대해 그 일을하는 경우 LIKE에만 효율적입니다 :
이러한 조건 중 하나에 해당하지 않는 경우 쿼리를 실행하는 SQL 엔진에 대한 유일한 방법은 전체 테이블 스캔을 수행하는 것입니다. 이 만 10 ~ 20에 대한 행에서 사용할 수 있습니다. 저쪽은 신속하지만 사용할 수 없게 것이다.
참고 : MySQL을 MATCH 한 가지 문제는 '즐'에 대한 검색은 'ㅋ'의 값으로 열을 일치하지 않도록 전체 단어 만에 일치하는 것 같다, 그러나 '즐 *'에 대한 검색합니다.
from https://stackoverflow.com/questions/792875/which-sql-query-is-better-match-against-or-like by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL 서버에서 이메일을 보내? (0) | 2020.04.18 |
---|---|
[SQL] 하나의 문 주위의 트랜잭션 기능은 무엇입니까? (0) | 2020.04.18 |
[SQL] 어떻게 데이터베이스의 동시 업데이트를 처리하는? (0) | 2020.04.18 |
[SQL] 어떻게 재귀 CTE는 라인으로 줄을 실행 하는가? (0) | 2020.04.18 |
[SQL] 나는 SQL 표 JSON 또는 XML 데이터를 저장할 수있는 경우 (0) | 2020.04.18 |