我有一个非常普遍的问题,但似乎找不到合适的答案。
我需要从表中获取页面的行数,以及足够的信息来分页这些数据。所以一般来说我需要对行总数进行非常粗略的估计(一般来说,我需要知道的是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。
答案 0 :(得分:4)
我发现了另一个有趣的想法:
更好的设计是将寻呼机转换为“下一个”链接。假设每页有20个结果,则查询应使用21行的LIMIT并仅显示20.如果结果中存在第21行,则会显示下一页,并且您可以呈现“下一个”链接。
如果你不需要桌子的总数,它确实是紧固解决方案。
答案 1 :(得分:0)
这是一个被打死的老话题。多次。 Count是获取典型表中行数的最快方法。 但是如果你从来没有从中删除任何东西(这是一个奇怪的假设,但在某些情况下会起作用。),那么你可以简单地获得最后一行的ID(可能更快,但不一定)。这也符合您的估计需求,因为很可能不正确。
但是又一次,if you are using for example myisam, then nothing beats count(大多数情况都是如此)。