mysql分页查询:LIMIT m,n还是选择所有ID然后按前端页面?

时间:2017-03-08 13:35:18

标签: mysql sql

如果我们按LIMIT m, n使用传统方法,我们可能会采取以下步骤:

  1. SELECT COUNT(*) FROM table WHERE condition获取总数并计算页数;

  2. SELECT columns FROM table WHERE condition LIMIT 0, 100显示第一页(假设每页100行);

  3. 点击“下一页”时
  4. SELECT columns FROM table WHERE condition LIMIT 100, 100;

  5. ...

  6. 这可能非常昂贵,因为WHERE condition可能是全表扫描。如果缓存关闭,MySQL可能会在每个页面上缓慢执行此操作。

    所以我有另一种方法来实现这个分页查询:

    1. SELECT id FROM table WHERE condition获取符合我条件的所有ID。如果此表中有大量数据(例如1,000,000多行),我们可以限制结果大小(例如,最多10,000个,LIMIT 10000)。这些ID被发送到前端(通过动态页面或Ajax,JavaScript代码或JSON数据);

    2. 在前端,JavaScript选择前100个ID作为第一页,然后请求这些行,因此我们在后端有SELECT columns FROM table WHERE id IN (id_0, id_1, ..., id_99);

    3. 点击“下一页”时我们SELECT columns FROM table WHERE id IN (id_100, id_101, ..., id_199);

    4. ...

    5. 在这种方法中,我们只有一个WHERE condition,并且主键查询会查询完整数据。

      这是在我的兼职项目中实现的:(http://)www.chess-wizard.com/base/(首页数据存储在JSP for SEO中)。

      我将这个想法分享给我的团队成员,但他们不同意我的意见: - (

      为什么LIMIT m,n必须是标准 / 唯一方式来实现分页查询?

0 个答案:

没有答案