1

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

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

  1. 从 GET 变量获取当前页面和每页结果
  2. 获取用于显示目的的结果总数(显示 534 个结果中的 10 个)
  3. 根据当前页面和每页结果确定要获取的结果。
  4. 将结果返回到视图以显示和构建分页类

据我所见,我有以下两种选择之一:

结果较少的多个查询

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

一次查询并让 PHP 进行处理

  1. 将所有行返回到数组
  2. 让 PHP 从数组中返回行并执行 count()

哪个会更快?我理解选项 1 的结果越多越好,但是感觉仍然感觉像 2 个查询来计算行然后返回某些结果仍然比仅返回所有结果并让 PHP 完成其余处理的 1 个查询更快。

也许还有另一种更充分的方式我想念?

4

3 回答 3

3

测试一下。

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

如果您真的想进城,请对一系列占位符数据运行一组测试,其中包含各种负载测试项目。毕竟,您正在制作一个“框架”,因此您不妨找出有效的方法。

以及我个人的看法:

如果 PHP 代码是整页渲染,或在单个会话中完成,请使用内部 SQL 视图来获取页面。如果您要拥有一个同时供多个会话使用的 *.php 文件,则仅将数据完全存储在 PHP 中,并且这样做可以避免数据库往返。

于 2013-05-27T19:48:38.610 回答
1

如果您使用MySQLi,您可以将结果保留在MySQL( MYSQLI_USE_RESULT) 中并PHP一一读取,以避免超载PHP的内存。

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

笔记:

如果您使用MYSQLI_USE_RESULT所有后续调用将返回错误 Commands out of sync,除非您调用mysqli_free_result().

于 2013-05-27T19:37:23.640 回答
0

我建议使用您的第一种方法和一个查询来获取计数(使用 MySQL 的COUNT函数,而不是 PHPmysql_num_rows或类似的函数)和另一个查询来选择当前页面所需的行,给定偏移量和每页结果的参数。

于 2013-05-27T19:39:43.703 回答