代码之家  ›  专栏  ›  技术社区  ›  Sam

分页非常大的数据集

  •  3
  • Sam  · 技术社区  · 17 年前

    我在MySQL中有一个数据集,使用limit已经是一个昂贵的查询,查找结果的数量也很昂贵。因此,我希望避免进行另一个查询来查找结果的数量。我无法使用MYSQL\u CALC\u FOUND\u行,因为限制在子查询中:

    SELECT * FROM items,
    (
      SELECT
        item_id
      FROM
        (etc)
      WHERE
        some.field=<parameter>
      AND (etc)
      GROUP BY (something)
      ORDER BY (something_else) DESC
      LIMIT 15
    ) subset
    WHERE item.id=subset.item_id
    

    这现在更像是一个设计问题。。。 当我不知道最后一页时,如何允许用户翻阅此数据 ? 我只知道它们是否走得太远(例如:查询不返回结果)。

    2 回复  |  直到 17 年前
        1
  •  6
  •   Bill Karwin    17 年前

    以下是MySQL大师Baron Schwartz的一篇文章摘要:

    http://www.mysqlperformanceblog.com/2008/09/24/four-ways-to-optimize-paginated-displays/

    优化分页显示的四种方法

    1. 在第一次查询中,获取并缓存所有结果。

    2. 不要显示所有结果。即使谷歌也不能让你看到第一百万个结果。

    3. 估计有多少结果。同样,谷歌做到了这一点,没有人抱怨。

        2
  •  0
  •   dkretz    17 年前

    为了加强这一点,“多少”的概念无论如何都是非常短暂的;当用户得到答案时,很容易就错了。