CakePHP:是否可以强制find()运行单个MySQL查询

时间:2013-12-02 17:20:25

标签: mysql sql cakephp cakephp-2.0

我正在使用CakePHP 2.x.当我检查sql转储时,我注意到它的“自动化”导致我的find()之一运行几个单独的SELECT查询(然后可能将它们全部合并为一个漂亮的数据数组)。

这通常很好,但是我需要在一个包含多个连接的10K行的表上运行一个非常大的查询,这对于魔术来说太过分了,因为当我尝试通过{{1}构造它时查询在300秒后超时。但是当我使用JOINS手动编写等效查询时,它运行速度非常快。

我的理论是,无论需要PHP“魔法”来编织单独的查询,都会导致这个大型查询出现瓶颈。

  1. 我的理论对于正在发生的事情是一个合理的解释吗?
  2. 有没有办法告诉Cake只是保持简单并制作一个大胖子而不是它的花式自动化?
  3. 更新:我忘了提及我已经知道find('all', $conditions)使用这就是我如何发现减速来自PHP魔术。当我们以这种方式执行它时它会起作用,但是以两种不同的形式维护相同的查询感觉有点笨拙。这就是为什么我希望CakePHP提供一种替代方法,以便从多个较小的查询中构建大型查询。

1 个答案:

答案 0 :(得分:0)

在这样的情况下,您查询具有10k记录的表,您不应该进行查找('all')而不限制关联,这些是您可以应用的一些策略:

  1. 设置递归为0如果您不需要相关模型
  2. 使用Containable Behavior仅显示您需要的关联模型。
  3. 对您的查询应用限制
  4. 缓存是一个好朋友
  5. Create and destroy associations on the fly根据需要。
  6. 由于您没有指定问题,我只是根据您遇到的问题为您提供了一般性的想法