【发布时间】:2011-09-24 05:14:44
【问题描述】:
我在profiles 和categories 之间有一个多对多映射。这个查询:
$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 只是在一个类别数组中迭代。
-
您最好从
$categoryids 创建一个数组并在连接表上执行where_in()。我不想将其添加为答案,因为您不必使用 ORM 做类似的事情,但我不知道这是否是 Datamapper 的缺点。 -
我想知道这是否可能。
-
请修改您的问题,您显示的是零代码,不是建设性问题,标记为CLOSE。
标签: php codeigniter codeigniter-datamapper