Korma中的条款是否会在关系中针对每个项目触发一个查询?

时间:2013-12-05 15:39:29

标签: clojure korma sqlkorma

Korma页面上的文档说, 在实体下,

(has-many email)
      ;; assumes users.id = email.users_id
      ;; but gets the results in a second query
      ;; for each element

所以,如果我理解它是否正确,如果一位老师有很多学生,我希望所有学生都能在每个教师地图中嵌入教师, Korma会为每位老师生成一个SQL查询吗?

当我们有数百万老师的时候,这不会影响表现吗?

1 个答案:

答案 0 :(得分:1)

是的,它将为每位老师执行1次额外请求以获取他们的学生。您可以在korma中查看with-later宏,它基本上添加了一旦korma检索到所有教师就会执行的功能。这个函数通过收集教导进行迭代,并为每个教师执行(select ...)以获得他的学生并将他们附加到教师的地图上。

  

当我们拥有数百万教师时,这不会影响表现   ?

我认为这确实会损害表现。但是,通过加入教师和学生表,然后通过教师对学生进行分组,实现它可能会更加高效,实施起来更复杂,更容易出错。无论如何,查询数百万条记录并将它们转换为clojure中的地图将是内存和耗时的过程。