首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用PHP和MySQL高效地对大型数据集进行分页?

如何使用PHP和MySQL高效地对大型数据集进行分页?
EN

Stack Overflow用户
提问于 2009-09-01 11:33:29
回答 7查看 12.7K关注 0票数 7

你们中的一些人可能知道,在MySQL中使用LIMIT关键字并不能阻止它读取前面的记录。

例如:

代码语言:javascript
运行
复制
SELECT * FROM my_table LIMIT 10000, 20;

这意味着MySQL仍然会读取前10,000条记录,并在生成我们想要的20条记录之前丢弃它们。

因此,在对大型数据集进行分页时,较高的页码意味着较长的加载时间。

有谁知道任何现有的分页类/技术/方法可以以更有效的方式对大型数据集进行分页,即不依赖于LIMIT MySQL关键字?

如果可能的话,用PHP编写,因为这是我公司的首选武器。

干杯。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-01 11:42:01

一种解决方案可能是不使用limit子句,而是使用连接-在用作某种序列的表上连接。

有关更多信息,我在SO上找到了这个question / answer,它提供了一个示例--可能对您有帮助;-)

票数 1
EN

Stack Overflow用户

发布于 2009-09-01 15:51:35

首先,如果你想分页,你一定要有一个ORDER BY子句。然后,您只需使用该子句来更深入地挖掘您的数据集。例如,考虑以下内容:

代码语言:javascript
运行
复制
SELECT * FROM my_table ORDER BY id LIMIT 20

你会有前20条记录,假设他们的id是: 5,8,9,...,55,64。指向第2页的分页链接将类似于"list.php?page=2&id=64“,查询将为

代码语言:javascript
运行
复制
SELECT * FROM my_table WHERE id > 64 ORDER BY id LIMIT 20

无偏移量,仅读取20条记录。它不允许你随意跳转到任何页面,但大多数时候人们只是浏览下一个/上一个页面。"id“上的索引将提高性能,即使有很大的偏移量。

票数 7
EN

Stack Overflow用户

发布于 2009-09-01 11:43:15

基本上有3种方法,每种方法都有自己的权衡:

  1. 将所有10000条记录发送到客户端,并通过Javascript等方式在客户端处理分页。明显的好处是,所有记录只需要一个查询;明显的缺点是,如果记录大小很大,发送到浏览器的页面大小将是成比例的-用户可能实际上并不关心整个记录集。
  2. 做您当前正在做的事情,即SQL限制,并在每个请求中只获取所需的记录,完全无状态。好处是它只发送当前请求页面的记录,所以请求很小,缺点是a)每个页面都需要一个服务器请求,b)正如您所提到的,随着结果中后面页面的记录/页面数量的增加,速度会变慢。在单调递增的id字段上使用JOIN或WHERE子句有时会在这方面有所帮助,特别是当您从静态表而不是动态query.
  3. Maintain请求结果时,服务器上的某种状态对象会缓存查询结果,并且可以在未来的请求中在有限的时间内引用。优点是它有最好的查询速度,因为实际的查询只需要运行一次;缺点是必须管理/存储/清理这些状态对象(特别是对于高流量网站)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1361969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档