我有一个分布式 PHP5 应用程序,允许用户通过 MySQL 数据进行搜索和分页。有时,他们的查询可能包含数十万条记录,并且这些记录总是按时间戳排序,因此记录量和排序方式会影响性能。
我需要提高分页效率。很久以前,我放弃了 SQL_CALC_FOUND_ROWS
,转而使用 COUNT(*)
,但这意味着查询仍然会运行两次,一次有限制,一次没有限制。
我可以结合这两个查询并依靠 PHP 对结果集进行分页,而不是使用 LIMIT
子句。更新:这是不可能的,因为大型数据集我正在尝试使用会超过为 php 设置的内存限制。由于这是分布式的,我不能指望每个人都更改他们的设置。
但是,我真的很想缓存结果并以这种方式分页 - 与不得不再次查询 MySQL 相比,我会多快。因为它是分布式应用程序,所以我不会有任何我通常使用的缓存系统,如 Memcached 等。 session 存储可能太小。
还有其他选择吗?有没有更好的方法来对结果进行分页,或者有一种安全的方法来缓存结果并让 PHP 对它们进行分页?
最佳答案
您需要显示准确的结果数吗?您总是可以告诉您的用户“找到超过 1000 个结果”。此外,当您执行 count(*) 时,它可能不一定会查看表中的所有记录,它会使用表中的索引进行有效计数。
如果您的表非常庞大,您始终可以使用SHOW TABLE STATUS
查询来查找有关您的表的信息。如果是 MyISAM 表,此命令将为您提供准确的行数,但如果是 InnoDB,则可能不那么准确。
希望对你有帮助
关于php - 在 PHP 中高效地缓存和分页大型 MySQL 结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15800132/