更高效 - 多个SQL查询或PHP中的一个查询和进程?

时间:2014-10-16 14:33:45

标签: php mysql database

我有一个php应用程序,显示3个数据表,每个表都来自同一个MySQL表。每条记录都有一个名为status的整数字段,其值可以是1,2或3.表1显示状态= 1的所有记录,表2显示状态= 2,表3显示状态= 3.

要实现这三个MySQL查询可以使用WHERE运行以按状态过滤,迭代每组结果一次以填充三个表。

另一种方法是从表中选择all,然后为每个表迭代一组相同的结果,每次使用php测试状态值。

这些方法中的一种是否会比另一种更有效?或者其中一个被认为比另一个更好?

3 个答案:

答案 0 :(得分:2)

通常,最好在RDBMS端进行过滤,这样可以减少需要传输的数据量。

通过网络将数据从RDBMS服务器传输到PHP客户端不是免费的。网络具有容量,您可以生成如此多的流量,从而成为应用程序性能的约束。

例如,最近我帮助了每秒运行多次查询的用户,每个用户生成13MB的结果集数据。查询在服务器上快速执行,但他们无法将数据传送到他的应用程序,因为他只是在耗尽他的网络带宽。这是一个在测试期间没有发生的性能问题,因为当他一次运行一个查询时,它就在网络容量内。

答案 1 :(得分:0)

如果使用第二种方法,则只与数据库连接一次,因此效率更高。 即使它不是,它也比IMO更优雅。

当然在某些情况下连接三次会更好(例如,从这个查询中获取信息会很复杂),但对于大多数情况,我会采用第二种方式。

答案 2 :(得分:0)

我会创建一个存储过程,返回您需要预先格式化的所有字段,不多也不少。

然后只需在php上循环而不调用任何其他表。

这样,您只运行1个查询,并且只获得所需的字节数。所以相同的带宽,更少的http请求=更多的性能。