分页 - 从数据库获取所有项目然后分页,或获取项目的“页面”?

时间:2012-01-11 12:16:49

标签: php zend-framework pagination doctrine-orm

我目前正在开发一个Zend Framework项目,使用Doctrine作为ORM。

我遇到了一个典型的情况,你必须在表格中显示一个项目列表(大约400个),当然,我不想一次显示所有项目。 我之前已经使用过Zend_Paginator(只是一些基本用法),但我总是习惯从数据库中获取所有项目,然后对它们进行分页,但现在感觉不太正确。

我的问题是:最好先从数据库中获取所有项目,然后“分页”它们,或者获取“页面”项目,因为它们是要求?哪个会对性能产生更大的影响?

2 个答案:

答案 0 :(得分:1)

数据库引擎通常最适合为您进行检索。因此,一般来说,如果您可以将数据检索任务委托给数据库引擎而不是在内存中并使用您的编程语言,那么性能的最佳选择就是让数据库引擎为您完成。

但请记住,如果您没有正确配置索引或者没有运行良好的查询,您将无法从数据库引擎中获得最佳结果。

但是,现在大多数数据库引擎都能够为您优化查询并以最正常的形式运行它们。

答案 1 :(得分:1)

对我来说,最好是获取部分数据,然后通过它们进行分页。

  1. 如果您从数据库中获取了所有数据,则可以借助JavaScript进行分页。 页面的第一次打开需要很长时间(对于400 rec。可以)。 浏览器的内存有限。如果用户在浏览器中打开了很多选项卡 你占用了大量的内存(包括你的数据) 这会降低浏览器的速度和应用程序的速度。 您只有400条记录,但数据的增加经常发生。 在最坏的情况下,打开页面时整个浏览器可能会中断。 如果浏览器不支持JS ...

  2. ,该怎么办?
  3. 如果您从DB获取部分数据,唯一的缺陷就是if 用户的Internet速度非常慢(但这是第一个选项中的缺陷 - 在第一次刷新页面时)。 如果有人想要访问另一个页面,则需要比JavaScript更长的时间。

  4. 从长远来看,第二种选择对我来说更好(因为如果它有效,它会工作多年。