使用多个查询而不是一个查询是否“好”?

时间:2013-09-13 15:20:21

标签: mysql sql database join

最近在构建一个Web应用程序时,我开始考虑从我正在进行的查询中返回的信息:

查找用户信息和(为简单起见)与此用户关联的相关电话号码。简单的事情:

SELECT a.fname, a.lname, b.phone 
FROM users a 
JOIN users_phones b 
    ON (a.userid = b.userid) 
WHERE a.userid = 12345;

这里没问题(是的我预防注射等,不是这个问题的重点)。当我考虑返回的数据时,我会返回(可能)几行信息,每个信息都包含该用户名。让我们说单个用户有1000个与之关联的电话号码。这是一个名字和姓氏,每次回复很多。我们还假设我想要返回的不仅仅是该用户的名字和姓氏,实际上我开始返回相当多的额外行,我真的只需要一次。< / p>

是否存在更合适的情况&#34;多次调用数据库?

e.g。

SELECT firstname, lastname 
FROM users 
WHERE userid = 12345;

SELECT phone 
FROM users_phones 
WHERE userid = 12345;

如果答案是肯定的,是否有一个好的/适当的方法来确定何时使用多个查询而不是单个查询?

3 个答案:

答案 0 :(得分:3)

我认为这实际上取决于您的用例。在您给出的示例中,将其作为两个查询返回似乎是有意义的,特别是如果您将该信息传递回移动设备,您希望确保以尽可能少的数据发送它们(并非每个人都无限制)数据.....)

我可能会在这些查询中添加DISTINCT,如果这会根据您的表格产生影响。

答案 1 :(得分:2)

使用JOIN的查询可能比两个独立查询慢。这实际上取决于您正在进行的访问类型。

对于您的示例,我将使用两种查询方法。这些查询可以并行执行,可以缓存,除了任意表示问题之外,JOIN没有真正的理由。

您还需要关注返回重复数据。在您的示例中,对于每个电话号码,将会重复显示fnamelname,从而导致传输大量实际无用的数据。这是因为您所描述的一对多关系。

一般来说,如果这意味着发送更少的数据,或者因为这两个查询不是独立的,你会想JOIN

答案 2 :(得分:0)

这应该由应用程序驱动。基本上,您在一个查询中检索一个地方所需的所有信息。如果您以此问题页面为例,则会看到您的用户ID,信誉计数器和徽章计数器。首次显示问题页面时,无需检索其他用户配置文件信息。

只有当用户点击一个用户ID时,才会查询其余的个人资料,甚至可能都不是全部,因为个人资料页面上有几个标签。

但是,如果您的应用程序保证一次访问所有1000个电话号码以及用户名,那么您可能应该一起获取它们。