2011-05-18 43 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