programing

MATCH ANDING과 LIKE 중 어떤 SQL 쿼리가 더 좋습니까?

copysource 2022. 9. 15. 23:32
반응형

MATCH ANDING과 LIKE 중 어떤 SQL 쿼리가 더 좋습니까?

데이터베이스에서 키워드 "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 ANDERGINT가 없는 'xxfoo'를 찾을 수 있다는 것입니다.

어떤 것이 선호됩니까, 아니면 더 나은 솔루션이 있습니까?

갱신하다

현재MySQL 5.6그리고 나중에는InnoDB테이블 서포트Match... Against.


첫 번째가 훨씬 낫다.MyISAM 테이블에서는 이러한 열에 대해 전체 텍스트 인덱스를 사용합니다.다른 하나는 모든 행에 대해 콘캣을 수행하고 나서 비교를 수행하면서 전체 테이블 스캔을 수행합니다.

LIKE다음과 같은 경우에 한해 효율적입니다.

  • 컬럼(특정 데이터베이스 벤더가 기능 인덱스(예를 들어 Oracle 등)를 지원하여 사용 중인 경우를 제외하고 함수의 결과가 아님)
  • 칼럼의 시작(즉,LIKE 'blah%'와는 반대로LIKE '%blah%');
  • 색인화된 기둥

이러한 조건 중 하나가 참이 아닌 경우 SQL 엔진이 쿼리를 실행하는 유일한 방법은 전체 테이블 검사를 수행하는 것입니다.이것은 약 10,000줄에서 20,000줄로 사용할 수 있습니다.하지만 그 이후에는 바로 사용할 수 없게 됩니다.

주의: MySQL의 MATCH의 한 가지 문제는 단어 전체에 대해서만 일치하는 것처럼 보인다는 것입니다. 따라서 "bla" 검색은 "blah" 값을 가진 열과 일치하지 않지만 "bla*" 검색은 "bla*" 검색과 일치합니다.

언급URL : https://stackoverflow.com/questions/792875/which-sql-query-is-better-match-against-or-like

반응형