2012-03-27 5 views
1

어떤 쿼리가 더 빠르며 테이블에 1M 레코드가있는 데이터베이스가 더 빠른 이유는 무엇입니까? 쿼리를 어떻게 최적화 할 수 있습니까? 먼저 하나두 개의 서로 다른 쿼리 사이의 속도

SELECT id,column1,column2 FROM `table1` WHERE MATCH(column1) 
AGAINST('string1 string2 string3 ' in boolean mode) ORDER BY column2 ASC LIMIT 10 

두 번째는 :

SELECT id,column1,column2 FROM `table1` WHERE column1 LIKE %string1% 
OR column1 LIKE %string2% OR column1 LIKE %string3% OR column2 LIKE %string1% 
OR column2 LIKE %string2% OR column2 LIKE %string3% OR column3 LIKE %string1% OR 
column3 LIKE %string2% OR column3 LIKE %string3% ORDER BY column2 ASC LIMIT 10 
+1

1k, 10k 회 실행하여 직접 테스트 할 수 있습니다 (부울 모드에서는 'mi'에 대한 일치)로 문자열 "emil"을 검색 할 수 없습니다. – safarov

답변

3

성냥은 전문 검색입니다. MySQL 용 전체 텍스트 검색 색인을 만든 경우 LIKE '% ... %'보다 훨씬 빠릅니다.이 경우 인덱스가 없기 때문입니다.

'% ... %'에 색인을 사용할 수없는 이유는 문자열의 모든 문자에 색인을 만드는 것이 쉽지 않기 때문입니다.

또한 두 쿼리의 기능이 다르지만 전체 텍스트 인덱스는 단어를 검색하고 단어와 함께 만 사용할 수 있습니다. 물론 작동하지 않습니다.

0

like '%foo%' 유형의 일치는 불가능 인덱스를 사용할 수 있도록하고, DB 전체 테이블마다 검사해야 할 것입니다. 전체 텍스트 버전은 훨씬 더 빨라야합니다.

2

MATCH ... REPLACE는 읽는 것이 더 빠를 것이지만 삽입하는 시간은 길어집니다. 당신은 그것에 인덱스를 만들어야 할 것입니다. 당신이 그것을 사용하려는 경우도

는이 작업을 읽어야합니다 (이것은 MyISAM 테이블에서만 작동) 요구 사항을 많이해야합니다 : 여기 http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

을 그리고 것은 제한이 난에 대해 말씀하고 있습니다 : http://dev.mysql.com/doc/refman/5.0/en/fulltext-restrictions.html

+0

당신이 제공 한 링크는 프랑스어로되어 있습니다 .... 나는 프랑스어로만 초보자입니다! :) 대답 해 주셔서 감사합니다 ... 나는 투표 할 것입니다! –

+0

Wooops my bad. 바로 링크 :) – haltabush

관련 문제