我的iPhone应用程序连接到我的PHP web服务从MySQL数据库中检索数据,一个请求可以返回500个结果。

实现分页和一次检索20个项的最佳方法是什么?

假设我从数据库中接收了前20个条目,我现在如何请求接下来的20个条目?


当前回答

本教程展示了一种进行分页的好方法。 使用MySQL进行高效分页

简而言之,避免使用OFFSET或较大的LIMIT

其他回答

从MySQL文档:

The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants (except when using prepared statements). With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1): SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15 To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter. This statement retrieves all rows from the 96th row to the last: SELECT * FROM tbl LIMIT 95,18446744073709551615; With one argument, the value specifies the number of rows to return from the beginning of the result set: SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows In other words, LIMIT row_count is equivalent to LIMIT 0, row_count.

本教程展示了一种进行分页的好方法。 使用MySQL进行高效分页

简而言之,避免使用OFFSET或较大的LIMIT

有相关的文献:

优化了使用MySQL的分页,使计算行总数和分页之间的差异。 使用MySQL的高效分页,由雅虎公司在Percona性能会议2009。Percona MySQL团队还提供了一个Youtube视频:高效分页使用MySQL(视频),

主要问题发生在使用大偏移量时。它们避免将OFFSET与各种技术一起使用,从WHERE子句中的id范围选择,到某种缓存或预计算页面。

在Use the INDEX网站上有一些建议的解决方案,Luke:

“分页结果”。 “正确的分页方式”。

如果您希望在存储过程中执行此操作,可以尝试此操作

SELECT * FROM tbl limit 0, 20.

不幸的是,使用公式不起作用,所以你可以执行一个准备好的语句,或者只是给过程的开始和结束值。

为查询定义OFFSET。例如

Page 1-(记录01-10):offset = 0, limit=10;

第2页-(记录11-20)offset =10, limit =10;

并使用以下查询:

SELECT column FROM table LIMIT {someLimit} OFFSET {someOffset};

第2页示例:

SELECT column FROM table
LIMIT 10 OFFSET 10;