2012-05-16 3 views
3

나는 약 3,500,000 개의 제품 테이블을 가지고 있습니다. 표에는 title이라는 열에 대한 전체 텍스트 색인이 있습니다.3,500,000 개의 행이있는 테이블의 쿼리 최적화

다음 쿼리 예제는 완전히 받아 들일 수없는 최대 4 초가 걸리며, 최적화 할 방법을 찾고 있습니다. 아이디어/조언을 높이 평가했습니다.

기본적으로; 의

SELECT PRid, title, Artist, author, actors, imageURL, prodcat, lowprice, 
highprice, prodcatID, description from products where 
((MATCH(title) AGAINST ('+blue +top' IN BOOLEAN MODE))) order by 
userrating desc limit 500 

답변

1

얼마나 많은 독특한 조합 : 열이 인덱싱해야하는, 내가 밖으로 개별적으로 많은 열을 당겨해야하거나 빨리 모든 열을 당겨하는 등 등

쿼리 예 (23 곳) "제목"이 있습니까? 주요 데이터 테이블에 외래 키가있는 조회 테이블에 해당 데이터를 저장하는 것이 좋습니다.

데이터를 쿼리 할 때 두 테이블을 결합하고 필터를 작은 테이블에 적용하면 적용 시간이 짧아집니다. 그러면 주 데이터 테이블에서 색인을 생성 할 수있는 숫자 필드에서 조인이 수행됩니다.

3.5m 행의 텍스트 필터보다 훨씬 빠릅니다. 해당 데이터 내에 중복이 많다고 가정하면 조회 테이블이이 크기의 일부일 수 있습니다.

텍스트 필드 대신 숫자가 있으면 행이 작아 지므로 전체 데이터 크기가 작아 지므로 주 데이터를 읽는 것이 더 빠를 것입니다.

모든 텍스트 기반 데이터를 조회로 가져 오면 주 데이터 테이블이 동적이 아닌 고정 된 형식이 될 수 있으므로 모든 데이터가보다 빠르게 만들어 지므로 테이블에서 데이터를 찾을 때 인덱스가 더 효율적입니다.

희망 하시겠습니까? 전화의

데이브

2

첫 번째 포트는 항상 MySQL이 무엇을하는지 볼 수 EXPLAIN을해야합니다. 필자는 성냥 점수 이외의 다른 항목을 정렬하는 것이 도움이되지 않는다고 생각합니다. mysql이 전체 ​​텍스트 색인과 동시에 정렬을 위해 사용자 지정에 색인을 사용할 수 있다고 생각하지 않습니다.

지난 번 MySQL 전체 텍스트 검색을 사용하여 (전 몇 년 전만해도) 필자는 수백만 행을 넘는 속도가 아니 었습니다. cloudsearch, elasticsearch, solr 또는 sphinx와 같은 전체 텍스트 검색 엔진을 고려할 수 있습니다.