0

我有一个非常常见的问题,但似乎找不到一个好的答案。

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

所以count()真的是大材小用。而且我已经SELECT * FROM table LIMIT 0, 50运行了,所以如果它可以附加到这个命令中就更好了。

我听说过SQL_CALC_FOUND_ROWS。但我也听说它并不比只做count自己更有效率。“不幸的是,使用 SQL_CALC_FOUND_ROWS 会带来令人讨厌的后果,即吹走可能发生的任何 LIMIT 优化”。

所以,总而言之,我有点认为使用 MySQL 的行估计是要走的路。但我不知道该怎么做。或者这个估计值可能有多少。

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

4

2 回答 2

5

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

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

如果您不需要表格的总数,它确实是最快的解决方案。

于 2013-05-02T21:33:49.517 回答
0

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

但是话又说回来,如果您使用例如 myisam,那么没有什么比计数更重要(大多数情况下都是如此)。

于 2013-05-02T21:22:42.577 回答