3

我有一个分布式 PHP5 应用程序,允许用户通过 MySQL 数据搜索和分页。有时,他们的查询可能包含数十万条记录,并且这些记录总是按时间戳排序,因此记录的数量和排序方式会按原样影响性能。

我需要提高分页效率。很久以前我放弃SQL_CALC_FOUND_ROWS了 a COUNT(*),但这意味着查询仍然运行两次,一次有限制,一次没有。

我可以结合这两个查询并依靠 PHP 对结果集进行分页,而不是使用LIMIT子句。更新:这是不可能的,因为我尝试使用的大型数据集会超过为 php.ini 设置的内存限制。由于这是分布式的,我不能依赖每个人来更改他们的设置。

但是,我真的很想缓存结果并以这种方式分页 - 我会比再次查询 MySQL 快得多因为它是一个分布式应用程序,所以我不会有任何我通常使用的缓存系统,比如 Memcached 等。会话存储可能太小了。

有没有其他选择?有没有更好的方法对结果进行分页,或者有一种安全的方法来缓存结果并让 PHP 对它们进行分页?

4

1 回答 1

0

您需要显示结果的确切数量吗?您总是可以告诉您的用户“找到超过 1000 个结果”。此外,当您执行 count(*) 时,它可能不一定会查看表中的所有记录,它使用表上的索引来进行有效计数。

如果您的表很大,您可以随时使用SHOW TABLE STATUS查询来查找有关您的表的信息。如果是 MyISAM 表,此命令将为您提供确切的行数,但如果是 InnoDB,则可能不准确。

希望这可以帮助

于 2013-04-04T02:56:51.687 回答