CakePHP 2.x是否解决了深层嵌套可包含查询的性能问题

CakePHP 2.x是否解决了深层嵌套可包含查询的性能问题,php,cakephp,cakephp-1.3,cakephp-2.0,Php,Cakephp,Cakephp 1.3,Cakephp 2.0,我正在开发一个构建在1.3.x分支上的遗留CakePHP应用程序,该应用程序大量使用可包含行为,特别是深层嵌套包含 显然,这是一个巨大的性能问题,因为CakePHP框架处理深层包含下的查询的方式。在一个请求中,我们有超过10K个查询,然后将数据合并到一个数组中 有人能确认这些问题是否在Cake 2.x分支中得到了解决,并且通过升级框架,我们可以在性能问题上取得进展 由于时间限制,我们目前可以升级或处理系统的重写部分,以不使用Containable,但不能同时使用Containable 我更愿意升

我正在开发一个构建在1.3.x分支上的遗留CakePHP应用程序,该应用程序大量使用可包含行为,特别是深层嵌套包含

显然,这是一个巨大的性能问题,因为CakePHP框架处理深层包含下的查询的方式。在一个请求中,我们有超过10K个查询,然后将数据合并到一个数组中

有人能确认这些问题是否在Cake 2.x分支中得到了解决,并且通过升级框架,我们可以在性能问题上取得进展

由于时间限制,我们目前可以升级或处理系统的重写部分,以不使用Containable,但不能同时使用Containable

我更愿意升级,因为还有其他好处,但我需要确保我们的性能问题将得到解决

深嵌套包含的示例

$this->Event->find('all', array(
        'conditions' => $conditions,
        'contain' => array(
            'SessionDay' => array(
                    'Activity' => array(
                     'TimeSlot' => array(
                        'TimeSlotBooking',
                            'order' => array('slot_time' => 'asc')
                    )
                    )
            ),
            'Activity' => array(
                'TimeSlot' => array(
                    'TimeSlotBooking',
                    'order' => array('slot_time' => 'asc')
                )
            ),
            'Interview' => array(
                'InterviewBooking',
                'order' => array('interview_time' => 'asc')
            ),
            'EventCode'
            )
        )
    );

我在Cake 2.x的项目中使用了非常深的嵌套可包含查询,它们工作得很好

它仍然会生成多个查询,在某些情况下,它不会生成多个查询

SELECT * FROM table WHERE x IN (1,2,3)
它将做到:

SELECT * FROM table WHERE x = (1)
SELECT * FROM table WHERE x = (2)
SELECT * FROM table WHERE x = (3)
因此,您可能会遇到很多查询。一天结束时,这将取决于实际需要从所有表中检索多少行


我建议使用相同的数据库安装另一个Cake 2项目。只需快速复制您的模型并运行最大的查询,然后查看查询调试输出中的差异以查找任何差异。

我怀疑您是否会看到查询中的差异,大多数改进来自于取消php4支持,而DBO层基本上保持不变。@dogmatic69这不完全正确。Cake>=2实现了该标准,这对代码执行有积极的性能影响。Evad您还可以将临时联接与“手动”queryyes一起使用,以获得性能。Cake将首先遍历这些可包含的定义,然后构建queryes并执行它们。因此,手动连接也可能是您的答案。谢谢您的建议。我将在圣诞节休息期间尝试Jleagle的建议(因为我很想更新我们的核心),但出于实际工作原因,我们的首要任务将是用临时连接替换最坏的违规者。如前所述,我需要确保管理层看到改进:)