2012-04-15 2 views
1

매우 느린이 쿼리 :전체 텍스트 :이 쿼리를 사용하고 있지만, 불행하게도 천천히 작동

SELECT *, 
    (MATCH(`title`) AGAINST ('$word' IN BOOLEAN MODE) * 2 
    + MATCH(`content`) AGAINST ('$word' IN BOOLEAN MODE) * 2 
    + MATCH(`url`) AGAINST ('$word' IN BOOLEAN MODE) * 1.1 
    + MATCH(`desc`) AGAINST ('$word' IN BOOLEAN MODE) * 1.2) * `like` 
    AS score 
FROM `data` 
WHERE MATCH(`content`,`desc`,`title`,`url`) AGAINST ('$word' IN BOOLEAN MODE) 
ORDER BY `score` DESC LIMIT 1000 
데이터베이스의 결과가 15000 개 기록했다되지만이 약 25sec 시간이 걸리는 것을 의미 15000입니다

질문. 나는 PDO를 사용하고있다.

+2

전문 전문 검색 엔진은 어떻게됩니까? 스핑크스 예를 들면. –

+2

검색어의 형식을 올바르게 지정하십시오. 긴 수평 스크롤이 있습니다. – Lion

+0

인덱스 구조를 특별하게 제공하십시오. SELECT *는 결코 좋은 생각이 아닙니다! – worenga

답변

0

FULLTEXT 인덱스가 필요합니다. 그렇지 않으면 DBMS는 매번 전체 테이블을 검색해야합니다. 이렇게하면 레코드 삽입 속도가 느려집니다. 4 열에 대한 전체 텍스트 검색은 항상 상대적으로 느립니다.

CREATE FULLTEXT INDEX indexTitle ON `data` (title) 
CREATE FULLTEXT INDEX indexContent ON `data` (content) 
CREATE FULLTEXT INDEX indexURL ON `data` (url) 
CREATE FULLTEXT INDEX indexDesc ON `data` (desc) 
CREATE FULLTEXT INDEX combinedIndex ON `data` (content, desc, title, url) 
관련 문제