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