多个相等测试的效率与MySQL中的连接相比

时间:2011-05-18 21:12:08

标签: mysql join performance

假设我想根据与该内容相关联的user_id查询内容表中的数据 - 但我想通过多个用户获取内容。

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

这会更有效吗?

2 个答案:

答案 0 :(得分:1)

或者更简单的事情:

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

从像PHP这样的东西构建动态SQL就像这样。

  • 补充说:也是,相当不错,直到你到达> 1000件左右的物品。你还必须注意MAX_PACKET,但这是最容易/最快的方法来处理那个范围内的东西。

答案 1 :(得分:0)

我认为很难说它是否会更快,数据库最终仍然必须做同样的工作,但是它可以通过连接算法比索引搜索更有效地完成它,你必须对它进行基准测试。