我有两张桌子:
一个称为数据,每个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个选择查询,所以我想知道什么是最佳的性能,一个更大 - 加入或两个小 - 更快的查询。
如果加入,这两者将如何结合?
答案 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;
它还没有经过测试,所以你应该带上一粒盐。这至少是一个起点。