복붙노트

[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. ==============================

    1.MySQL을 5.6으로 이상 InnoDB 테이블 지원 일치 ...에 대하여.

    MySQL을 5.6으로 이상 InnoDB 테이블 지원 일치 ...에 대하여.

    첫 번째는 훨씬 낫다. MyISAM 테이블에 그것은 그 컬럼에 대한 전체 텍스트 인덱스를 사용합니다. 다른 하나는 모든 행 다음 비교에 CONCAT을하고 스캔 전체 테이블을 할 것입니다.

    당신이에 대해 그 일을하는 경우 LIKE에만 효율적입니다 :

    이러한 조건 중 하나에 해당하지 않는 경우 쿼리를 실행하는 SQL 엔진에 대한 유일한 방법은 전체 테이블 스캔을 수행하는 것입니다. 이 만 10 ~ 20에 대한 행에서 사용할 수 있습니다. 저쪽은 신속하지만 사용할 수 없게 것이다.

    참고 : MySQL을 MATCH 한 가지 문제는 '즐'에 대한 검색은 'ㅋ'의 값으로 열을 일치하지 않도록 전체 단어 만에 일치하는 것 같다, 그러나 '즐 *'에 대한 검색합니다.

  2. from https://stackoverflow.com/questions/792875/which-sql-query-is-better-match-against-or-like by cc-by-sa and MIT license