2014-02-06 52 views
1

我不確定,我是對還是錯。在多個索引上搜索給出錯誤total_found結果(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) 

和查詢查詢:

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) 

假設如果我選擇x_person和y_person索引在一起時,total_match應131541 + 34733 = 166274

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 = 165552.任何一個可以解釋爲什麼這不顯示薩姆e'total_found'數字?

+0

@MoyedAnsari,其獅身人面像查詢和它與MySql.I沒有關係。這個問題標記爲sphinx。 –

+1

該查詢找到的總行數可能爲131541 * 34733(即,兩個表中的行的每個可能組合),但該sql可能無效,因爲兩個表似乎都有一個名爲is_active的列,並且您尚未指定你指的是哪一個。 – Kickstart

+0

我指的是最後的結果,在最後的結果中我選擇了索引(x_person和y_person)。所以我假設'total_found'應該是第一個和第二個'total_found'的總和。 @ Kickstart –

回答

1

獅身人面像搜索這兩個索引,並做出結果的'聯合'。將它們加在一起。

131541 + 34733 = 166274. Which is roughly 165552 

上的微小差異可能是因爲現代

  1. total_found通常是一個近似。所以不會精確加起來。

  2. Duplicate ID。如果在每個索引中找到相同的doc_id,它將只在最終結果集中返回一次。 total_found將反映這種「重複數據刪除」(但也只approximatly)

能使其不太近似的,通過提高max_matches,它的大到足以涵蓋整個結果集,這個數字是準確的。

+0

我在查詢x_person和y_person,它有相同的文件ID。 :)謝謝@barryhunter。測試少於1000條記錄以避免max_matches問題。真的非常感謝您的支持。 –

+0

如果你覺得它對別人有用,請點擊問題。我認爲很多人都有同樣的問題。 –