2010-06-17 3 views
0

4000 개의 레코드가있는 테이블이 있습니다 (전체 텍스트 검색을 통해 처리하기가 훨씬 쉽습니다). 검색 쿼리가 처음 실행될 때 훨씬 느려집니다. 그것은 약 5 ~ 10 초 걸립니다. 그렇다면 그것은 더 빨라집니다. 사이트가 10 분 또는 15 분 동안 비활성 상태로 유지되고 쿼리를 다시 실행하려고하면 속도가 느려집니다.FULLTEXT 검색 (MySQL)은 처음에는 느리고 두 번째 이후에는 훨씬 빠릅니다.

mysql + PHP를 사용하고 있습니다. 나는 이것이 캐싱 문제라고 생각한다. 우리 사이트는 캐시에 액세스 할 수없는 제 3 자 서버에서 호스팅됩니다.

내 문제의 해결 방법이 있습니까?

미리 감사드립니다.

편집 :

안녕, 답장을 보내 감사합니다. 여기 내 쿼리입니다.

PRODUCT_2_CATEGORY, PRODUCT, MERCHANT PRODUCT_2_CATEGORY.PRODUCT_ID = PRODUCT.ID PRODUCT.PRO_STATUS AND = '활성'AND PRODUCT.MERCHANT_ID = MERCHANT.ID MERCHANT.M_STATUS AND = '활성'AND (CAT_ID FROM

SELECT PRODUCT_2_CATEGORY.PRODUCT_ID = 1 '또는 CAT_ID ='1004 '또는 CAT_ID ='1005 '또는 CAT_ID ='1006 '또는 CAT_ID ='1007 '또는 CAT_ID ='1008 '또는 CAT_ID ='1002 '또는 CAT_ID ='1003 '또는 CAT_ID = '45 '또는 CAT_ID = '46'또는 CAT_ID = '74 '또는 CAT_ID = '75'또는 CAT_ID = '76 '또는 CAT_ID = '49'또는 CAT_ID = '50 '또는 CAT_ID = '77'또는 CAT_ID = '78 '또는 CAT_ID = '84 '또는 CAT_ID = '47'또는 CAT_ID = '89 '또는 CAT_ID = '83'또는 CAT_ID = '89 '또는 CAT_ID = '81'또는 CAT_ID = 또는 CAT_ID = '85 '또는 CAT_ID = '48'또는 CAT_ID = '53 '또는 CAT_ID = '54'또는 CAT_ID = '52 '또는 CAT_ID = '88'또는 CAT_ID = '87 '또는 CAT_ID = '86' '또는 CAT_ID = '90'또는 CAT_ID = '90 '또는 CAT_ID = '91'또는 CAT_ID = '92 '또는 CAT_ID = '93'또는 CAT_ID = '94 '또는 CAT_ID = '11'또는 CAT_ID = '95 'O CAT_ID = '99 '또는 CAT_ID = '10'또는 CAT_ID = '96 '또는 CAT_ID ='102 '또는 CAT_ID ='103 '또는 CAT_ID ='104 '또는 CAT_ID CAT_ID = '107'또는 CAT_ID = '108'또는 CAT_ID = '109'또는 CAT_ID = '110'또는 CAT_ID = '114'또는 CAT_ID = '105'또는 CAT_ID = '106' 119 '또는 CAT_ID ='120 '또는 CAT_ID ='121 '또는 CAT_ID ='115 '또는 CAT_ID ='122 '또는 CAT_ID ='123 '또는 CAT_ID ='124 '또는 CAT_ID ='125 '또는 CAT_ID ='116 ' 또는 CAT_ID = '127'또는 CAT_ID = '128'또는 CAT_ID = '129'또는 CAT_ID = '117'또는 CAT_ID = '130'또는 CAT_ID = '131'또는 CAT_ID = '118'또는 CAT_ID = '111'또는 CAT_ID CAT_ID = '138'또는 CAT_ID = '139'또는 CAT_ID = '140'또는 CAT_ID = '133'또는 CAT_ID = '141'또는 CAT_ID = '132'또는 CAT_ID = '136' 142 'OR CAT_ID ='143 '또는 CAT_ID ='144 '또는 CAT_ID ='145 '또는 CAT_ID ='146 '또는 CAT_ID ='134 '또는 CAT_ID ='147 '또는 CAT_ID ='148 '또는 CAT_ID ='149 ' 또는 CAT_ID = '150'또는 CAT_ID = '151'또는 CAT_ID = '135'또는 CAT_ID = '152'또는 CAT_ID = '153'또는 CAT_ID = '154'또는 CAT_ID = '155'또는 CAT_ID = '156'또는 CAT_ID = '64 '또는 CAT_ID ='158 '또는 CAT_ID = '70'또는 CAT_ID = '164'또는 CAT_ID = '71 ' 또는 CAT_ID = '165'또는 CAT_ID = '15'또는 CAT_ID = '166'또는 CAT_ID = '167'또는 CAT_ID = '168'또는 CAT_ID = '169'또는 CAT_ID = '160'또는 CAT_ID = '73 '또는 CAT_ID = '170'또는 CAT_ID = '176'또는 CAT_ID = '173'또는 CAT_ID = '174'또는 CAT_ID = '161'또는 CAT_ID = '175'또는 CAT_ID = '176' 178 '또는 CAT_ID ='162 '또는 CAT_ID ='179 '또는 CAT_ID ='180 '또는 CAT_ID ='181 '또는 CAT_ID ='182 '또는 CAT_ID ='183 '또는 CAT_ID ='163 '또는 CAT_ID ='184 ' 또는 CAT_ID = '192'또는 CAT_ID = '191'또는 CAT_ID = '190'또는 CAT_ID = '189'또는 CAT_ID = '188'또는 CAT_ID = '187'또는 CAT_ID = '186'또는 CAT_ID = '185'또는 CAT_ID CAT_ID = '66 '또는 CAT_ID = '67'또는 CAT_ID = '68 '또는 CAT_ID = '69') AND MAT_ ('193'또는 CAT_ID = '69 '또는 CAT_ID = '69' PRODUCT.TITLE의 ASC의 LIMIT 0 BY (BOOLEAN 모드의 '셔츠') ORDER, 저희 사이트는 세 번째 부분은 웹 서버에서 호스팅되는 12

(Plesk를 제어 패널)에 대한 PRODUCT.TITLE). 따라서 다른 소프트웨어를 설치할 수 있는지 여부는 확실하지 않습니다.

우리 사이트는 2010.shoppingstrip.com.au입니다. 이 쿼리는 당신이 어떤 것을 검색 할 때 실행될 것입니다.

감사

답변

1

테이블을 인덱싱하면 큰 차이가 발생할 수 있습니다. MySql 데이터베이스에 150 만 레코드가있는 최근 작업에서 조인이 포함 된 기본 쿼리는 35 분 이상 걸립니다. 테이블 (약 3-4 분 소요)에 대해 색인을 생성 한 후 쿼리가 4 초 내에 실행되었습니다.

가능한 개선을 위해 검색어를 검사해야합니다. 예를 들어, 외래 조인은 쿼리를 극적으로 길게 만들 수 있습니다. 또한 한 번에 한 레코드 씩 잡아 내기 위해 과도한 foreach 루프를 실행하면 과도한 지연이 발생할 수 있습니다. 상황에 따라 성능 향상을 위해 특정 필수 요소 만 검색하도록 쿼리를 조정할 수 있습니다.

쿼리를 테스트하려면 로컬 컴퓨터에 WAMP 서버 복사본을 넣으십시오. 스크립트와 데이터베이스를 가져 와서 몇 가지 테스트를 실행하십시오. 이렇게하면 쿼리가 비효율적인지 문제가 서버에 있는지 여부를 확인할 수 있습니다.

사용하는 검색 방법도 고려하십시오. 예를 들어, mysql에서 값을 찾는 것은 "LIKE", "=", "REGEXP"등과 같은 연산자를 사용하여 수행 할 수 있습니다. 성능을 향상시키고로드 시간을 줄이기 위해 실험하십시오.

마지막으로 다른 모든 것이 실패하면 캐싱 솔루션 또는보다 강력한 데이터베이스 호스팅을 사용할 수 있습니다. 사물의 거대한 계획에서 4,000 개의 레코드가 너무 크지 않으므로로드 시간이 느려서는 안됩니다. 캐싱 시스템에 내장 된 젠드 프레임 워크를 통해 캐싱에 대한 행운을 보았습니다.

아직 답을 얻지 못했다면 검색어 샘플을 게시하면 해당 지역으로 이동할 수 있습니다.

+0

인덱싱을 사용하더라도 'MySQL'은 그렇게하지 못합니다. . 'Lucene'이나'Sphinx'는'MySQL'보다 한단계 향상되었습니다. 최근 버전에서는 'MySQL'의 전체 텍스트 검색에 대한 지원 및 성능이 크게 향상되었음을 계속 주목해야합니다. 좀 더 철저한 토론을위한이 이야기를 참조하십시오 : http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql –

+0

제가 사용하고있는 질문을 제공하기 위해 제 질문을 수정했습니다. 감사합니다. –

-1

MySQL의 성능과 사용 편의성 관점에서 모두 전체 텍스트 검색에서 정말 나쁜 것입니다.

이 경우 Sphinx을 사용할 것을 권장합니다.

+0

나는 정말로 downvotes를 얻지 않는다. 이 프리젠 테이션은 문제에 대해 밝혀야합니다. (http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql) –