2011-03-17 2 views
0

검색 문자열이 여러 필드에있을 수있는 검색어를 검색하려고합니다. 이 테이블은> 20K 레코드를 가지고 있으며 쿼리는 6-7 초가 걸립니다. 나는 이것을 가속화하는 방법을 찾아 내려고 노력하고있다.여러 필드에 대해 mysql 쿼리가 가능합니다.

SELECT SQL_CALC_FOUND_ROWS cl.fname, 
          cl.email, 
          e.e_id 
FROM clients cl, 
     records e 
WHERE ((cl.fname LIKE 'smith%' 
      OR cl.lname LIKE 'smith%' 
      OR cl.email LIKE 'smith%')) 
     AND cl.id = e.client_id 

세 개의 텍스트 문자열을 모두 갖고있는 한 필드를 만들고 세 필드 대신 전체 텍스트 검색을 수행하는 것에 대해 궁금합니다.

도움을 주시면 감사하겠습니다.

답변

0
당신은 같은 것을 할 수

:

SELECT * 
FROM ((SELECT l.fname, 
       cl.email, 
       e.e_id 
     FROM clients cl 
       JOIN records e 
        ON cl.id = e.client_id 
     WHERE cl.fname LIKE 'smith%') 
     UNION ALL 
     (SELECT l.fname, 
       cl.email, 
       e.e_id 
     FROM clients cl 
       JOIN records e 
        ON cl.id = e.client_id 
     WHERE cl.lname LIKE 'smith%') 
     UNION ALL 
     (SELECT l.fname, 
       cl.email, 
       e.e_id 
     FROM clients cl 
       JOIN records e 
        ON cl.id = e.client_id 
     WHERE cl.email LIKE 'smith%')) d 
GROUP BY id; 

을 다음과 같은

  • (records.client_id)
  • (clients.id)
  • 에 인덱스를 필요
  • (clients.fname)
  • (clients.lname)
  • (clients.email)
관련 문제