【问题标题】:Codeigniter/Datamapper "where_related" causing too many queriesCodeigniter/Datamapper“where_related”导致查询过多
【发布时间】:2011-09-24 05:14:44
【问题描述】:

我在profilescategories 之间有一个多对多映射。这个查询:

$profiles = new Profile();  
$profiles->where('foobar_flag',1);
$profiles->where_related($category);
$profiles->get();

运行大约需要 30 秒,该配置文件表中有大约 1000 个条目。还有一个类别表和一个profiles_categories 表。每次执行我最终得到了惊人的 4000 个查询。

如何使这更快?

【问题讨论】:

  • 我们可能需要查看更多代码。您至少可以隔离 一些 查询,还是 only 使用 where_related() 行发生?你在你的模型的__construct() 中做任何事情吗? $category 是如何创建的?你期望有多少结果,1000?
  • where_related 不知何故将查询数量增加了 10.7 倍。构造方法本质上是空的。 $category 只是在一个类别数组中迭代。
  • 您最好从$category ids 创建一个数组并在连接表上执行where_in()。我不想将其添加为答案,因为您不必使用 ORM 做类似的事情,但我不知道这是否是 Datamapper 的缺点。
  • 我想知道这是否可能。
  • 请修改您的问题,您显示的是零代码,不是建设性问题,标记为CLOSE

标签: php codeigniter codeigniter-datamapper


【解决方案1】:

如果您对 datamapper 中的某个功能不满意,请找到一种简化的方法,因为您的活动记录查询可能正如您所说的那样成本太高。

始终运行您的分析器:

$this->output->enable_profiler(TRUE);

这将使您真正了解幕后所做的事情。从那里开始优化。否则我们需要更多的代码才能在这里给出相关的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    相关资源
    最近更新 更多