我的iPhone应用程序连接到我的PHP web服务从MySQL数据库中检索数据,一个请求可以返回500个结果。
实现分页和一次检索20个项的最佳方法是什么?
假设我从数据库中接收了前20个条目,我现在如何请求接下来的20个条目?
我的iPhone应用程序连接到我的PHP web服务从MySQL数据库中检索数据,一个请求可以返回500个结果。
实现分页和一次检索20个项的最佳方法是什么?
假设我从数据库中接收了前20个条目,我现在如何请求接下来的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;
其他回答
为查询定义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;
查询1:SELECT * FROM yourtable WHERE id > 0 ORDER BY id LIMIT 500
查询2:SELECT * FROM tbl LIMIT 0,500;
查询1对中小记录运行更快,如果记录数量等于5000或更高,结果相似。
500条记录的结果:
Query1需要9.9999904632568毫秒
Query2耗时19.999980926514毫秒
8,000条记录的结果:
Query1需要129.99987602234毫秒
Query2需要160.00008583069毫秒
本教程展示了一种进行分页的好方法。 使用MySQL进行高效分页
简而言之,避免使用OFFSET或较大的LIMIT
有相关的文献:
优化了使用MySQL的分页,使计算行总数和分页之间的差异。 使用MySQL的高效分页,由雅虎公司在Percona性能会议2009。Percona MySQL团队还提供了一个Youtube视频:高效分页使用MySQL(视频),
主要问题发生在使用大偏移量时。它们避免将OFFSET与各种技术一起使用,从WHERE子句中的id范围选择,到某种缓存或预计算页面。
在Use the INDEX网站上有一些建议的解决方案,Luke:
“分页结果”。 “正确的分页方式”。
对于500条记录,效率可能不是问题,但如果你有数百万条记录,那么使用WHERE子句来选择下一页可能会更有利:
SELECT *
FROM yourtable
WHERE id > 234374
ORDER BY id
LIMIT 20
这里的“234374”是您查看的上一页中最后一条记录的id。
这将使id上的索引能够用于查找第一条记录。如果你使用LIMIT偏移量,20,你会发现它变得越来越慢,随着你的页面接近尾声。正如我所说的,如果只有200条记录,这可能无关紧要,但如果结果集更大,情况就不同了。
Another advantage of this approach is that if the data changes between the calls you won't miss records or get a repeated record. This is because adding or removing a row means that the offset of all the rows after it changes. In your case it's probably not important - I guess your pool of adverts doesn't change too often and anyway no-one would notice if they get the same ad twice in a row - but if you're looking for the "best way" then this is another thing to keep in mind when choosing which approach to use.
如果您确实希望使用带有偏移量的LIMIT(如果用户直接导航到页10000,而不是逐个分页,这是必要的),那么您可以阅读这篇关于晚期行查找的文章,以提高带有较大偏移量的LIMIT的性能。