首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >优化Slick生成的SQL查询

优化Slick生成的SQL查询
EN

Stack Overflow用户
提问于 2015-08-15 19:48:27
回答 1查看 850关注 0票数 19

我有一个非常简单的查询,在SQL中可以表示为:

代码语言:javascript
复制
SELECT
  c.id,
  count(cp.product_id)
FROM cart c LEFT OUTER JOIN cart_product cp ON c.id = cp.cart_id
WHERE c.id = 3
GROUP BY c.id;

当我使用Slick DSL来表示上面的查询时,我感到非常惊讶,这个查询是从下面的DSL生成的

代码语言:javascript
复制
Cart.joinLeft(CartProduct)
  .on { case (c, cp) => c.id === cp.cartId }
  .filter { case (c, cp) => c.id === 3 }
  .groupBy { case (c, cp) => c.id }
  .map { case (c, pr) => (c, pr.length)
}

如下所示:

代码语言:javascript
复制
SELECT
  x2.x3,
  count(1)
FROM (SELECT
        x4.x5  AS x3,
        x4.x6  AS x7,
        x8.x9  AS x10,
        x8.x11 AS x12,
        x8.x13 AS x14,
        x8.x15 AS x16
      FROM (SELECT
              x17."id"      AS x5,
              x17."user_id" AS x6
            FROM "cart" x17) x4 LEFT OUTER JOIN (SELECT
                                                   1                AS x9,
                                                   x18."id"         AS x11,
                                                   x18."cart_id"    AS x13,
                                                   x18."product_id" AS x15
                                                 FROM "cart_product" x18) x8 ON x4.x5 = x8.x13) x2
WHERE x2.x3 = 3
GROUP BY x2.x3;

我做错了什么?看到这样的嵌套查询正常吗?如果查询的复杂性增长如此之快,那么使用灵活的DSL又有什么意义呢?我可能会写原生SQL,但我真的很喜欢Slick DSL。优化Slick查询的技术有哪些?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32024403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档