我有一个php应用程序,显示3个数据表,每个表都来自同一个MySQL表。每条记录都有一个名为status的整数字段,其值可以是1,2或3.表1显示状态= 1的所有记录,表2显示状态= 2,表3显示状态= 3.
要实现这三个MySQL查询可以使用WHERE运行以按状态过滤,迭代每组结果一次以填充三个表。
另一种方法是从表中选择all,然后为每个表迭代一组相同的结果,每次使用php测试状态值。
这些方法中的一种是否会比另一种更有效?或者其中一个被认为比另一个更好?
答案 0 :(得分:2)
通常,最好在RDBMS端进行过滤,这样可以减少需要传输的数据量。
通过网络将数据从RDBMS服务器传输到PHP客户端不是免费的。网络具有容量,您可以生成如此多的流量,从而成为应用程序性能的约束。
例如,最近我帮助了每秒运行多次查询的用户,每个用户生成13MB的结果集数据。查询在服务器上快速执行,但他们无法将数据传送到他的应用程序,因为他只是在耗尽他的网络带宽。这是一个在测试期间没有发生的性能问题,因为当他一次运行一个查询时,它就在网络容量内。
答案 1 :(得分:0)
如果使用第二种方法,则只与数据库连接一次,因此效率更高。 即使它不是,它也比IMO更优雅。
当然在某些情况下连接三次会更好(例如,从这个查询中获取信息会很复杂),但对于大多数情况,我会采用第二种方式。
答案 2 :(得分:0)
我会创建一个存储过程,返回您需要预先格式化的所有字段,不多也不少。
然后只需在php上循环而不调用任何其他表。
这样,您只运行1个查询,并且只获得所需的字节数。所以相同的带宽,更少的http请求=更多的性能。