2014-02-06 2 views
1

잘 모르겠습니다, 틀린가요?여러 인덱스에서 검색 한 결과가 잘못되었습니다 total_found Result (Sphinx 2.X)

두 개의 색인 x_person, y_person이 있습니다.

내가 y_person에 x_person

SELECT * FROM x_person WHERE is_active = 0 LIMIT 0,1; 

mysql> show meta; 
+---------------+--------+ 
| Variable_name | Value | 
+---------------+--------+ 
| total   | 1000 | 
| total_found | 131541 | 
| time   | 0.005 | 
+---------------+--------+ 
3 rows in set (0.00 sec) 

그리고 쿼리에 쿼리 할 경우 내가 함께 x_person 선택하고 y_person 색인 경우 가정

SELECT * FROM y_person WHERE is_active = 0 LIMIT 0,1;Show meta; 

mysql> show meta; 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| total   | 1000 | 
| total_found | 34733 | 
| time   | 0.002 | 
+---------------+-------+ 
3 rows in set (0.00 sec) 

의 total_match는해야 131,541 + 34,733 = 166,274

SELECT * FROM x_person,y_person WHERE is_active = 0 LIMIT 0,1; 


mysql> show meta; 
+---------------+--------+ 
| Variable_name | Value | 
+---------------+--------+ 
| total   | 1000 | 
| total_found | 165552 | 
| time   | 0.008 | 
+---------------+--------+ 
3 rows in set (0.00 sec) 

여기있어 total_found = 1655522. 아무 설명해 주실 수 있나요? 왜 샘이 보이지 않는거야? 전자 'total_found'번호?

+0

@MoyedAnsari, 그 Sphinx Query와 MySql과 관련이 없습니다.이 질문은 sphinx에 대한 것입니다. –

+1

해당 쿼리에 대해 발견 된 총 행 수는 131541 * 34733 (즉, 2 개의 테이블에서 가능한 모든 가능한 행 조합) 일 수 있지만 두 테이블 모두 is_active라는 열이있는 것으로 나타나며 sql은 지정되지 않았습니다. 어느 쪽을 가리키고 있는지. – Kickstart

+0

나는 마지막 결과를 참조하고있다. 마지막 결과에서 색인 (x_person과 y_person)을 모두 선택했다. 그래서 'total_found'는 첫 번째와 두 번째 'total_found'의 합계 여야한다고 가정합니다. @Kickstart –

답변

1

스핑크스는 두 인덱스를 모두 검색하여 결과의 ​​'합집합'을 만듭니다. 함께 추가.

131541 + 34733 = 166274. Which is roughly 165552 

약간의 차이는 아래

  1. total_found하는 종종 근사입니다 수 있습니다. 그래서 정확히 일치하지 않습니다.

  2. 중복 ID :. 각 색인에서 동일한 doc_id가 발견되면 최종 결과 집합에서 한 번만 반환됩니다. total_found는, 그것의 전체 결과 집합을 포함 할만큼 큰 그림이 정확합니다 (그러나 다시에만 approximatly)

max_matches을 높여, 근사치의 덜 할 수있는이 '중복 제거'를 반영합니다.

+0

나는 x_person과 y_person을 쿼리하고 있었고 동일한 문서 ID를 가지고있었습니다. :) 감사합니다 @ barryhunter. max_matches 문제를 피하기 위해 1000 개 미만의 레코드에 대해 테스트했습니다. 좋은 지원에 정말로 감사드립니다. –

+0

다른 사람들에게 유용하다고 생각되면 질문을 클릭하십시오. 많은 사람들이 똑같은 문제를 겪었습니다. –