我知道多个变量是这个等式的一部分,比如表的数量,列数,返回的行数,使用的索引等。但是如果我们整体说话
运行具有多个(例如5个以上)连接的查询更有效,其中大多数表将包含具有与主表中的行对应的信息的行,并且返回的结果将在20.000行范围内。为了论证,我们假设第一个表将包含具有创建日期的用户,并且在此日期我们决定要挑选的用户。其他表包含会话信息,用户注释等内容。应该挑选所有用户但是根据辅助表中字段的值,我们可能会忽略一个用户的会话数据,并在另一个用户上使用会话数据。用户,当我们完成结果。这样我们就可以在一个查询中获得所有需要的数据,但可能会同时为某些用户获取一些冗余数据。
或者按日期选择用户会更有效率,在迭代结果时,我们会在必要时从每个用户的其他表中获取数据吗?
假设返回行的工作是在PHP5 +中完成的。
答案 0 :(得分:1)
大联盟。
我完全没有任何证据可以证明这一点。不过,我确实从一些经验中说过:在我使用的系统中,我们做了数百万个小小的简单查询,而不是几个大的查询,而且所有数据密集型工作都需要很长时间。例如,加载直接SQL加载可以在几分钟内完成的数据需要一个小时。每个查询的成本完全占主导地位。
答案 1 :(得分:1)
我会说,做一个基准。
取决于“何时需要”的频率。如果您需要10%用户的额外日期,我认为seconde方法会更好。如果您需要90%,那么最好在一个大查询中检索所有内容。
答案 2 :(得分:0)
如果你的表有正确的索引(这对于连接有很多帮助),一个单一的SQL查询,甚至有点复杂,可能比几个查询更快,每个都意味着PHP和MySQL服务器之间的交换。
(但是,当然,唯一可以确定在特定情况下最适用的方法是测试两种解决方案,对它们进行基准测试!)