哪个更快:多个查询结果较少或返回所有并获得php处理

时间:2013-05-27 19:32:53

标签: php mysql pdo

我正在为我的框架忙于一个分页组件,我想知道以下哪两个更快(或者如果有更好的解决方案更好)。

我的想法是让我的对象按此顺序执行以下操作:

  1. 从GET变量中获取每页的当前页面和结果
  2. 获取显示结果总数(显示534个结果中的10个)
  3. 根据当前页面和每页结果确定要获得的结果。
  4. 返回结果以查看以显示和构建分页类
  5. 从我所看到的,我有两个选择之一:

    结果较少的多个查询

    1. 执行查询以确定所有结果的行数。
    2. 使用offset
    3. 执行另一个查询以返回活动页面所需的结果

      一个查询并让PHP进行处理

      1. 将所有行返回到数组
      2. 获取PHP以从数组中返回行并执行count()
      3. 哪个会更快?我理解选项1的结果越多越好,但它仍然感觉就像2个查询来计算行,然后返回某些结果仍然感觉比只返回所有结果的1个查询更快,并让PHP完成其余的处理。

        还有另一种我想念的方式吗?

3 个答案:

答案 0 :(得分:3)

测试它。

我们不知道您的框架在做什么,数据库的结构如何,或者PHP代码对数据的处理程度。对两者的核心项进行编码,并对同一个模拟数据集运行测试。

如果你真的想去城里,可以对一系列占位符数据进行一系列测试,并使用各种负载测试项目。毕竟,你正在制作一个“框架”,所以你也可以找出有效的方法。

以及我个人的观点:

如果PHP代码是整页渲染,或者在单个会话中完成,请转到内部SQL视图以获取页面。如果你要有一个多个会话同时使用的* .php文件,那么只能将数据完全存储在PHP中,并且可以避免数据库往返。

答案 1 :(得分:1)

如果您使用MySQLi,您可以将结果保留在MySQLMYSQLI_USE_RESULT)中并让PHP逐个阅读,以避免超载{{1}记忆。

您想要的所有信息都在这里: http://uk1.php.net/manual/en/mysqli.query.php

注意:

如果您使用PHP所有后续通话将返回错误 MYSQLI_USE_RESULT,除非您致电Commands out of sync

答案 2 :(得分:0)

我建议使用你的第一个方法用一个查询来计算(使用MySQL的COUNT函数,而不是PHP的mysql_num_rows或类似的)和另一个查询来选择当前需要的行页面给出了每页偏移量和结果的参数。