gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:09:46 27 4
gpt4 key购买 nike

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

这通常没问题,但我需要在一个包含多个连接的 10K 行的表上运行一个非常大的查询,这证明魔法无法处理,因为当我尝试通过 find 构造它时('all', $conditions) 查询在 300 秒后超时。但是当我用 JOINS 手动编写等效查询时,它运行得非常快。

我的理论是,将单独的查询组合在一起所需的任何 PHP“魔法”都会导致这一大型查询的瓶颈。

  1. 我的理论对正在发生的事情有合理的解释吗?
  2. 有没有办法告诉 Cake 保持简单并制作一个大胖 SELECT 而不是花哨的自动魔术?

更新: 我忘了说我已经知道 $this->Model->query(); 使用这个是我发现慢-下来是来自 PHP 魔法。当我们这样做时它是有效的,但是以两种不同的形式维护同一个查询感觉有点笨拙。这就是为什么我希望 CakePHP 提供一种替代方法来替代它从多个较小查询构建大查询的方式。

最佳答案

在这种情况下,您查询包含 10k 条记录的表时,您不应该在不限制关联的情况下执行 find('all'),这些是您可以应用的一些策略:

  1. 如果不需要相关模型,将recursive设置为0
  2. 使用Containable Behavior只带来您需要的相关模型。
  3. 对您的查询应用限制
  4. 缓存是个好 friend
  5. > Create and destroy associations on the fly如您所愿。

因为你没有具体说明问题,我只是给了你一般的想法,让你根据你遇到的问题应用

关于mysql - CakePHP:是否可以强制 find() 运行单个 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20334120/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com