更高效-多个SQL查询或php中的一个查询和处理


More efficient - multiple SQL queries or one query and process in php?

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

为了实现这一点,可以使用WHERE运行三个MySQL查询来按状态进行筛选,对每组结果迭代一次以填充三个表。

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

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

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

通过网络将数据从RDBMS服务器传输到PHP客户端并不是免费的。网络具有一定的容量,并且您可以生成如此多的流量,这会对您的应用程序性能造成限制。

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

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

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

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

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

通过这种方式,您只运行1个查询,并且只获得所需的字节。所以,相同的带宽,更少的http请求=更高的性能。