Php 分页-从数据库获取所有项目,然后分页,或获取;“第页”;物品的数量?
我目前正在开发一个Zend框架项目,使用条令作为ORM 我遇到了一种典型的情况,即必须在表中显示一个项目列表(大约400个),当然,我不想一次显示所有项目。 我以前已经使用过(只是一些基本用法),但我总是从数据库中获取所有项目,然后对它们进行分页,但现在感觉不太对劲Php 分页-从数据库获取所有项目,然后分页,或获取;“第页”;物品的数量?,php,zend-framework,pagination,doctrine-orm,Php,Zend Framework,Pagination,Doctrine Orm,我目前正在开发一个Zend框架项目,使用条令作为ORM 我遇到了一种典型的情况,即必须在表中显示一个项目列表(大约400个),当然,我不想一次显示所有项目。 我以前已经使用过(只是一些基本用法),但我总是从数据库中获取所有项目,然后对它们进行分页,但现在感觉不太对劲 我的问题是:最好先从数据库中获取所有项目,然后对它们进行“分页”,还是根据请求获取项目的“页面”?哪个对性能的影响更大?数据库引擎通常最适合为您执行检索。因此,一般来说,如果您可以将数据检索任务委托给DB引擎,而不是在内存中使用编程
我的问题是:最好先从数据库中获取所有项目,然后对它们进行“分页”,还是根据请求获取项目的“页面”?哪个对性能的影响更大?数据库引擎通常最适合为您执行检索。因此,一般来说,如果您可以将数据检索任务委托给DB引擎,而不是在内存中使用编程语言执行,那么性能的最佳选择就是让DB引擎为您执行 但也要记住,如果没有正确配置索引或没有运行良好的查询,则无法从数据库引擎中获得最佳结果
但是,现在大多数数据库引擎都能够为您优化查询,并以最正常的形式运行它们。对我来说,最好获取部分数据,然后对它们进行分页
从长远来看,第二种选择更好(对我来说),因为如果它有效,它将持续数年。Edit:获取所有项目将对性能产生最大影响,但影响程度显然取决于项目数量。我在使用limit时发现的最简单的解决方案,仍然需要总计数,就是从[table]中选择SQL_CALC_found_ROWS[columns],然后选择found_ROWS()作为行,以获得没有限制的“实际计数”。谢谢@Mick,但这并不能真正回答我的问题,哪一个更好?您不一定需要使用客户端资源对数据进行分页。如果您决心以编程方式进行,通常最好在服务器端进行(请参阅下面的答案)。但我认为使用DB引擎本身来实现这一点是一个好主意。:)是的,不一定:)我通常比较了JS和服务器端(php)分页……记住我使用的是zend框架!分页是通过Zend_Paginator完成的,因此它不是在客户端完成的。我总是可以用zend的缓存来存储项目。。。问题是我有一个动态表,可以“滑动”下来显示许多结果,你也可以搜索。。。所以我不知道是否真的有必要使用分页…我现在知道了。在Zend_Paginator_Adapter_DbSelect中,您可以修改Select_Qery(限制、顺序、位置……)。对于视图文件,您应该使用PaginationControl-aaa,您可以使用HTML表的内容。。。您可以设计html表,但可以使用ajax获取结果(数据)。。。这是一个更难但更好的方法…请看我下面的评论,让我知道你的想法。。。我不知道是否真的有必要使用分页。。。由于我使用的表的性质。。。我可以把所有的项目都放在里面,我不认为基于UI元素的性质,你甚至不需要分页。我想你可以按自己的方式做,不会有太大的反响。是的。。。我在想“保持简单愚蠢”。。。它的工作方式很好,所以我现在会坚持下去。。。我将看到随着数据库大小的增长,它对性能的影响有多大。。多亏了你们两个,保持简单和干净总是胜过一切。