2011-05-18 45 views
2

假設我想根據與該內容關聯的user_id從內容表中查詢數據 - 但我想通過多個用戶獲取內容。多重平等測試與MySQL中連接的效率

SELECT field1, field2, ... fieldn 
FROM content 
WHERE user_id=1 OR user_id=2 OR ... 

在我看來,這是相對有效的......達到一個點。假設content表的記錄大於200k,我對50個特定用戶的記錄感興趣。像以下這樣的查詢是否仍然有效?

SELECT field1, field2, ... fieldn 
FROM content 
WHERE user_id=1 OR ... OR user_id=50 

我正在考慮創建一個users_group表,像這樣:

CREATE TABLE users_group (
    group_id int(11), 
    user_id int(11), 
    primary_key(group_id,user_id) 
); 

...以及與用戶的軟件有興趣的團體填充它

然後我可以做像這樣的查詢:

SELECT field1, field2, ... fieldn 
FROM content c 
INNER JOIN users_group ug ON c.user_id=ug.user_id 
WHERE ug.group_id=1 

這會更有效嗎?

回答

0

我覺得這是很難說是否會更快與否,數據庫中仍有做同樣的工作,到了最後,但它可能是能夠與連接算法比更有效地做到這一點索引尋找,你必​​須對它進行基準測試。

1

或者,一些更容易:從像PHP

SELECT field1, field2, ... fieldn 
FROM content 
WHERE user_id IN (1,2,3,4,5,6,7...50) 

構建動態SQL是一個單元這樣。

  • 補充說:另外,相當不錯,直到你達到> 1000左右的項目。您還需要注意MAX_PACKET,但這是對該範圍內的事情最簡單/最快捷的方式。
+1

這只是一個句法變化,優化器會查看這個和一系列OR語句一樣的 – 2011-05-18 21:17:21

+0

同意。這是他的問題的一個不好的答案。我認爲正確的答案是'這更有效'。數據庫必須以某種方式獲取這些信息,並且提供的速度會更快。儘管如此,假設索引工作正常,對200K記錄也不會產生重大影響。 – 2011-05-18 21:26:39