2010-02-25 6 views
0

6 개의 테이블 t1, t2, t3, t4, t5, t6이 있습니다. 그리고 main table도 하나 있습니다. TOTAL 7 TABLES!LEFT JOIN 또는 REGULAR JOIN 및 MySql 테이블을 배열과 비교하는 방법은 무엇입니까? 성능이 필요합니다!

이제 분류 된 항목을 검색하는 데 SOLR을 사용하고 solr의 결과를 배열에 넣습니다. 배열 결과는 ID : nrs와 동일한 ID : s와 다시 일치시키는 데 사용됩니다.

MySql의 모든 테이블 중 첫 번째 열은 classified_id입니다.

사용자가 "cars"를 검색하면 Solr은 모든 cars classifieds를 찾고 id : s를 배열에 넣은 다음 마지막으로 MySql 주 테이블을 비교하여 테이블 t1 (cars 테이블)의 모든 내용과 일치시킵니다. classified_id는 두 테이블에서 동일합니다.

SOLR 결과 배열

은 먼저, 폭파되어

SELECT * FROM classified, t1 WHERE classified.ad_id IN ('$solr_id_arr_imploded') AND classified.classified_id=t1.classified_id 

내 Q이고, 이것이 내가이 작업을 수행하는 방법인가? 여기에 어떻게 가입해야합니까, 아니면 LEFT JOIN을 사용합니까? 어레이와 비교하는 더 빠른 방법이 있습니까? SOLR 10000 경기, 10000 ID의 다음 배열을 반환하는 경우

에는 자동차 광고가없는 경우 t1이 비어있을 수 있습니다 테이블 ...

가 기억 쿼리는 예를 들어, 는 아주 아주 긴 될 수 다음과 같이 번호가 반환됩니다 : bmw_m3_low_miles_8948939

감사

+0

검색 결과가 페이징 되나요? 즉, SOLR 검색에서 10,000 개의 일치 항목을 반환하는 경우 한 번에 모든 항목을 가져 오거나 한번에 50 개만 가져와야합니까? – outis

+0

안녕하세요. 결과는 MySql LIMIT로 호출됩니다. 아니 솔. 그러나 Solr에서이 작업을 수행하는 방법을 알고 있다면 어쩌면 이것이 어떻게 될 것인가? –

답변

1

IN에 대한 대안은 임시 테이블을 생성 ID를 함께 작성 및 내부가 조인 수행하는 것입니다. 다른 표의 색인이 classified_id에 있는지 확인하십시오. 옵션을 비교하려면 use EXPLAIN.