0

可能重复:
没有双重查询的 MySQL 分页?

我的网站上有一个搜索框,其中包括分页。

要设置分页,我必须知道匹配的数量,所以我考虑了两个选项:

  1. 使用 2 个查询:查询页面中的 X 个匹配项(使用limit),以及一个查询总共有多少匹配项。
  2. 使用 1 查询:获取所有匹配项,然后我知道行数,然后通过使用获取所需的行array_slice

我认为解决方案#2更好,你怎么看?

4

2 回答 2

3

在 MySQL 中,您可以添加SQL_CALC_FOUND_ROWS到查询中,然后运行SELECT FOUND_ROWS();

http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows

于 2012-12-12T16:30:03.867 回答
1

答案实际上取决于您预期匹配的行数以及存储在行中的数据大小。

传统的分页方法是使用 SQLLIMIT子句返回整个结果集的子集。如果您实际上需要知道全部记录数(以显示全部“页数”),那么您还需要进行 aSELECT COUNT(primary_key_field) FROM table WHERE [search condition]以获得该信息。

这通常会提供最佳结果,因为 COUNT 查询应该能够非常快速地执行,并且只要您在用于排序的字段上有索引(因为您总是想要一个ORDER BY以及LIMIT保证订单)。这也意味着您需要在应用程序的内存中保留的记录更少。

我确实认为在某些用例中,单一查询方法可能会更好(即不会有大量潜在行,行数据大小很小),这样您就没有大量的数据传输时间检索完整结果集的内存使用情况。

真的,您只需要在您的应用程序中测试一些场景,看看什么最适合您。

于 2012-12-12T16:34:45.767 回答