【发布时间】:2013-09-13 15:20:21
【问题描述】:
最近在构建一个网络应用时,我开始考虑从我所做的查询返回的信息:
查找用户信息和(为简单起见)与该用户相关联的电话号码。一些简单的事情:
SELECT a.fname, a.lname, b.phone
FROM users a
JOIN users_phones b
ON (a.userid = b.userid)
WHERE a.userid = 12345;
这里没问题(是的,我正在防止注射等,不是这个问题的重点)。但是,当我考虑返回的数据时,我(可能)返回了几行信息,每行都带有该用户名。假设单个用户有 1000 个与之关联的电话号码。这是每个电话都会返回的名字和姓氏。假设我想要返回的不仅仅是该用户的名字和姓氏,实际上我开始返回相当多的额外行,而我实际上只需要一次。
是否存在对数据库进行多次调用“更合适”的情况?
例如
SELECT firstname, lastname
FROM users
WHERE userid = 12345;
SELECT phone
FROM users_phones
WHERE userid = 12345;
如果答案是肯定的,是否有一种好的/适当的方法来确定何时使用多个查询而不是单个查询?
【问题讨论】:
-
我只是将其设为子查询并仅返回电话号码,将其包装在 SELECT phone FROM (......)
-
AFAIC,第 1 步:正确编写查询。不管你做 1 个数据库查询还是 1000 个,只要它是正确的。第 2 步:您的应用程序可能很慢。使慢的部分更快(但前提是你对“慢”有一个合理的定义。“慢”并不意味着“可能更快的东西”,而是“实际上导致问题的东西花费太长时间” )。