在Zf2中获取超过50,000行的高效且最快的方法

Dee*_*yal -2 mysql orm zend-db zend-framework2

我需要在代码中获取大量数据.我正在使用zf2,目前我正在使用Doctrine2来处理我的数据库.但我发现ORM查询比普通的mysql查询花费了很多时间.那么请你建议我在zf2中从数据库中获取大量数据的最佳方法.

Jur*_*man 8

这里有几点需要考虑:

  1. 默认情况下,Doctrine会将数据库记录保存到php对象(实体)中:它使用查询中的数据填充实体.这可以通过"智能猜测"来完成,这可能相对较慢.水合到阵列,你得到更快的响应.阅读手册中有关水合作用的更多信息.
  2. 默认情况下,Doctrine不使用任何缓存来解析映射或将DQL转换为SQL.您可以使用缓存来加快速度.此外,Doctrine处理只读实体比处理读/写更快.阅读手册中有关Doctrine性能问题的更多信息.
  3. 在html表(或其他)中渲染50,000行对于渲染引擎(Zend\View/ php)和DOM(在浏览器中)来说是一种痛苦.查询可能会被优化并加载相当快,将所有这些结果呈现到视图中并将它们显示到浏览器中也会非常慢.
  4. 使用分页将减小数据集的大小,同时加快查询和渲染速度.
  5. 使用ORM来帮助您进行映射,数据库抽象等非常好,但需要权衡:性能.使用像Doctrine这样的库固有地增加了执行时间:你永远不会达到Doctrine中php mysql函数的性能.

所以:

  1. 尝试减少一个查询的结果数量,以加快数据库查询,水合和渲染
  2. 尝试使用数组水合,缓存和只读实体来调整Doctrine的性能.
  3. 如果您需要尽可能快的方式,请不要使用Doctrine.自己尝试Zend\Db或编写sql中的所有内容