首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP `mysql_data_seek`和代码而不是SQL ` limit `来限制分页的结果是否明智?

问使用PHP `mysql_data_seek`和代码而不是SQL ` limit `来限制分页的结果是否明智?
EN

Stack Overflow用户
提问于 2011-06-08 20:05:35
回答 4查看 923关注 0票数 3

在工作中关注有关分页方法的对话,只获取特定页面所需的数据。在返回的数据集上使用PHP,并使用代码来限制或使用mysql_data_seek() LIMIT来限制分页结果,哪个更好?

例如,我们有一个用于对结果进行分页的内置函数,但我们必须进行两次查询才能使用它。首先,我们查询DB以了解有多少结果可用,然后使用LIMIT关键字查询db以实际获取相关页面的数据。

获取整个数据集并使用mysql_data_seek()遍历它,以便在显示之前获得相关页面的数据,这会不会更好?这样,我们就可以对两种需求执行一次查询,即查看有多少数据可用,然后只得到我们需要的页面。

我猜后者会使用更多的内存,也许更大的数据库会更慢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-08 20:08:58

附加的COUNT查询或SQL_CALC_FOUND_ROWS组合比加载整个表更有效。想象一下,如果你有数十亿行的!

在较大的集合上,它会吃得很慢。

  • 它在

  • 方面也不是很有效。
票数 4
EN

Stack Overflow用户

发布于 2011-06-08 20:41:29

有几个因素会影响查询所需的时间。要考虑的最重要的是,没有具体的顺序:

  1. 往返延迟:这由网络延迟(而不是带宽)决定。每个查询至少需要这么长时间。
  2. 查询执行时间:这是数据库服务器开始返回results
  3. Transmission所需的时间:这取决于您的网络带宽和结果的大小。

仅当MySQL服务器位于远程主机上时,第1点和第3点才重要。如果您的结果很小(短行,少于100行),则COUNT查询的往返延迟可能比传输所有行花费更多的时间。在这种情况下,简单地获取所有行可能更有优势。另一方面,如果您的结果很大,并且网络延迟很低,那么加载所有行将浪费大量时间。

第二点总是很重要的。COUNT查询可能会占用大量的时间和资源,因此,在某些情况下,只提取所有行可能更好,这样服务器只需运行一次查询。尽管您应该记住,计数查询通常比实际查询快得多,因为服务器不需要进行排序,可能只使用索引就可以完成计数,等等。此外,当您执行实际查询时,服务器可能能够使用计数查询的缓存结果。

另一种尚未被建议的可能性是,您执行查询,但只选择您感兴趣的行的主键。如果查询速度非常慢,这一点尤其有用。然后你可以缓存这个结果(例如,使用APC),然后在PHP中分页并为相应的主键选择整行。

票数 2
EN

Stack Overflow用户

发布于 2011-06-08 20:12:59

如果您只打算使用行,那么LIMIT就是这里的方法。正如@Wesley指出的那样,你将使用更少的带宽,查询也将更快地执行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6278413

复制
相关文章

相似问题

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