Mysql查询:加入或分开

时间:2012-08-31 11:54:51

标签: php mysql

我有两张桌子:

一个称为数据,每个ID只有一个(唯一)行。 第二个称为图像,每个ID有3行。

每次加载页面时,我都想为正好5个不同的ID获取数据和一个图像。

我现在的问题是:两个单独的SELECT查询或一个查询,两者都是连接的。

查询:

...

$all = $row["iD"] // includes **5** last iDs - fetched from DB
$all = implode(',',$all);

SELECT Name, Address FROM data WHERE iD IN($all);
SELECT url FROM images WHERE iD IN ($all) LIMIT 1;

我已经在页面上有其他3个选择查询,所以我想知道什么是最佳的性能,一个更大 - 加入或两个小 - 更快的查询。

如果加入,这两者将如何结合?

3 个答案:

答案 0 :(得分:1)

每个ID有三张图片,并且最后插入的图片(又名“最近内容”)每个ID需要一张图片?

然后你可以使用一个简单的自然连接与group by结合使用:

SELECT d.Name, d.Address, MAX(i.url) 
FROM data d, images i
WHERE i.iD = d.iD
GROUP BY d.Name, d.Address
ORDER BY d.iD DESC
LIMIT 5

大多数情况下,最好将选择组合跳过programmitcally开销(例如在循环中调用mysql_query())。 但有时它取决于基础数据。

答案 1 :(得分:0)

由于您的查询转到完全独立的表,我建议您使用2个单独的查询:这会使结果集保持较小并使其更有可能,至少有一个保留在查询缓存中,

关于你的第二个问题:你明白,这不能保证获取一个特殊的URL,但任何?主要是第一个按键,但不能保证。

答案 2 :(得分:0)

有关效果问题的答案,请参阅JOIN queries vs multiple queries。我可以理解的是,性能问题因具体情况而异,因此您应该对它们进行测试。

对于加入,你可以这样做;

SELECT User.iD, User.Name, User.Address, Image.url
FROM images as Image
JOIN data as User
  ON Image.iD = User.iD
WHERE Image.iD IN ($all)
LIMIT 1;

它还没有经过测试,所以你应该带上一粒盐。这至少是一个起点。