【发布时间】:2013-12-02 17:20:25
【问题描述】:
我正在使用 CakePHP 2.x。当我检查 sql 转储时,我注意到它是“自动”导致我的一个 find()s 运行几个单独的 SELECT 查询(然后可能将它们全部合并到一个漂亮的数据数组中)。
这通常没问题,但我需要在一个包含多个连接的 10K 行的表上运行一个非常大的查询,这证明魔法无法处理,因为当我尝试通过 find('all', $conditions) 构建它时查询在 300 秒后超时。但是当我使用 JOINS 手动编写等效查询时,它运行得非常快。
我的理论是,将单独的查询组合在一起所需的任何 PHP“魔法”都会导致这一大型查询的瓶颈。
- 我的理论是对正在发生的事情的合理解释吗?
- 有没有办法告诉 Cake 保持简单并制作一个大胖 SELECT 而不是花哨的自动化?
更新:我忘了提到我已经知道$this->Model->query(); 使用这就是我发现减速来自 PHP 魔法的方法。当我们这样做时,它可以工作,但是以两种不同的形式维护相同的查询感觉有点笨拙。这就是为什么我希望 CakePHP 能够提供一种替代方法,以替代从多个较小的查询构建大查询的方式。
【问题讨论】:
-
@przeqpiciel 谢谢。我知道
$this->Model->query()。这是一个合适的替代方案,但我希望不要通过手动 SQL 手动完成所有操作来“把婴儿和洗澡水一起扔掉”。
标签: mysql sql cakephp cakephp-2.0