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

时间:2014-03-12 06:01:18

标签: mysql orm zend-framework2 zend-db

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

1 个答案:

答案 0 :(得分:8)

这里有几点需要考虑:

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

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