我有一个分布式 PHP5 应用程序,允许用户通过 MySQL 数据搜索和分页。有时,他们的查询可能包含数十万条记录,并且这些记录总是按时间戳排序,因此记录的数量和排序方式会按原样影响性能。
我需要提高分页效率。很久以前我放弃SQL_CALC_FOUND_ROWS
了 a COUNT(*)
,但这意味着查询仍然运行两次,一次有限制,一次没有。
我可以结合这两个查询并依靠 PHP 对结果集进行分页,而不是使用LIMIT
子句。更新:这是不可能的,因为我尝试使用的大型数据集会超过为 php.ini 设置的内存限制。由于这是分布式的,我不能依赖每个人来更改他们的设置。
但是,我真的很想缓存结果并以这种方式分页 - 我会比再次查询 MySQL 快得多。因为它是一个分布式应用程序,所以我不会有任何我通常使用的缓存系统,比如 Memcached 等。会话存储可能太小了。
有没有其他选择?有没有更好的方法对结果进行分页,或者有一种安全的方法来缓存结果并让 PHP 对它们进行分页?