最有效的方式进行分页/粗略估计总行数

时间:2013-05-02 20:57:42

标签: php mysql pdo pagination

我有一个非常普遍的问题,但似乎找不到合适的答案。

我需要从表中获取页面的行数,以及足够的信息来分页这些数据。所以一般来说我需要对行总数进行非常粗略的估计(一般来说,我需要知道的是ceil(count()/50))。

所以count()真是太过分了。我已经运行SELECT * FROM table LIMIT 0, 50,所以如果它可以更好地附加到此命令。

我听说过SQL_CALC_FOUND_ROWS。但我也听说它不仅仅比你自己count更有效率。 “不幸的是,使用SQL_CALC_FOUND_ROWS会导致任何可能发生的LIMIT优化的恶劣后果。”

所以,总而言之,我认为使用MySQL的行估计是可行的方法。但我不知道该怎么做。或者这个估计可能有多远。

注意1:在我的情况下,我正在使用的大多数表只是每天更新几次,而不是所有时间。 注2:我正在使用PDO和PD。

2 个答案:

答案 0 :(得分:4)

我发现了另一个有趣的想法:

  

更好的设计是将寻呼机转换为“下一个”链接。假设每页有20个结果,则查询应使用21行的LIMIT并仅显示20.如果结果中存在第21行,则会显示下一页,并且您可以呈现“下一个”链接。

如果你不需要桌子的总数,它确实是紧固解决方案。

答案 1 :(得分:0)

这是一个被打死的老话题。多次。 Count是获取典型表中行数的最快方法。 但是如果你从来没有从中删除任何东西(这是一个奇怪的假设,但在某些情况下会起作用。),那么你可以简单地获得最后一行的ID(可能更快,但不一定)。这也符合您的估计需求,因为很可能不正确。

但是又一次,if you are using for example myisam, then nothing beats count(大多数情况都是如此)。