我正在使用CakePHP2.x。当我检查sql dump时,我注意到它是“自动的”导致我的find()
之一运行几个单独的SELECT查询(然后可能将它们全部合并为一个漂亮的数据数组)。
通常,这很好,但是我需要在具有多个联接的10K行的表上运行一个非常大的查询,这对于魔术来说实在是太多了,因为当我尝试通过find('all', $conditions)
构造查询时,它超时了300秒后。但是,当我使用JOINS手动编写等效查询时,它的运行速度非常快。
我的理论是,将单独的查询组合在一起所需的任何PHP“魔术”都将导致这一大查询的瓶颈。
我的理论是对正在发生的事情的合理解释吗?
有没有办法告诉Cake使其保持简单并进行一个大的SELECT而不是花哨的自动魔术?
更新:我忘了提起我已经对$this->Model->query();
有所了解。使用这种方法,我才发现减速是由PHP魔术引起的。当我们以这种方式执行时,它可以工作,但是以两种不同形式维护相同的查询会有些笨拙。这就是为什么我希望CakePHP提供一种从多个较小的查询中构建大型查询的方法的替代方法。
最佳答案
在这种情况下,如果您查询具有10k条记录的表,则不应在不限制关联的情况下执行find('all'),以下是一些可以应用的策略:
将递归设置为0如果不需要相关模型
使用Containable Behavior仅带来所需的关联模型。
将限制应用于您的查询
缓存是一个好朋友
Create and destroy associations on the fly根据需要。
由于您没有指定问题,因此我只是根据您遇到的问题为您提供了一些一般性的想法
关于mysql - CakePHP:是否可以强制find()运行单个MySQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20334120/