2011-11-30 2 views
0

내 PHP 사이트는 약 5k 제품의 온라인 상점입니다. 제품은 공급 업체, 범주 및 하위 범주에 속합니다. 각 항목에는 이름이 있으며 제품에는 설명이 있습니다.검색을 위해이 테이블을 어떻게 설정해야합니까?

우리가 설정 한 검색 쿼리는 멋지게 작동하지만 꽤 느리게 실행되는 경향이 있습니다. 범위는 0.20 초 ~ 30 초 (예 : 30 초)입니다. 우리는 미친 듯이 최적화했습니다. 앞으로 나아갈 여지가 없다고 생각하기 시작합니다. 그래서 우리는 캐싱을하고 있기 때문에 삶이 훨씬 쉬워 질 것입니다.

하지만 실행하면 MyISAM과 함께 제공되는 테이블 잠금이 모두 나타나기 때문에 여전히 서버를 죽이는 중입니다.

그럼 내 질문에 : InnoDB (행 수준 잠금)를 사용하고 FULLTEXT를 유지할 수있는 방법이 있습니까? DB를 오프 사이트로 이동하고 DB2와 같은 서비스를 사용해야합니까? 대신에 사용해야하는 다른 검색 엔진 유형 소프트웨어가 있습니까?

은 어떤 도움이 크게 감사합니다 :)

답변

1

InnoDB는 이제 전체 텍스트 인덱싱 가지고 : http://blogs.innodb.com/wp/2011/07/innodb-full-text-search-tutorial/

을하지만 새로운 기본적으로 브랜드이기 때문에, 대부분의 MySQL은 설치 아직 지원하지 않습니다.

표준 해결 방법은 전체 텍스트 인덱스가있는 검색 가능한 데이터의 복사본을 포함하는 '미러'MyISAM 테이블을 만드는 것입니다. 그런 다음 원래 InnoDB 테이블을 MyISAM 사본과 결합하여 myisam 필드에 대한 전체 텍스트 검색과 innodb 사본에있는 다른 'where'절을 정기적으로 검색한다.

InnoDB 테이블에서 적절한 트리거를 사용하면 MyISAM 복사본이 오래되거나 틀린 이유가 없으며, 단순히 다시 작성하여 예약 된 시간 간격으로 재구성 간격과 일치하는 staleness 창을 가질 수 있습니다.

관련 문제