soporta segundo query por optimizar lentas cuantas consultas con sql scala slick slick-3.0

segundo - Optimizando la consulta SQL generada por Slick



sql server query to html table (1)

Ya que ha escrito que está usando PostgreSQL, entonces no me preocuparía, ya que PostgreSQL es conocido por un optimizador de consultas realmente bueno. Una transformación tan simple no requiere esfuerzo, prácticamente no requiere tiempo adicional. Lo único es que espere, el problema eventualmente se solucionará en sentido ascendente (en algún lugar de la versión 3.1 de Slick) y no tiene que hacer nada.

ps: ¿Por qué no estás simplemente usando esta consulta? Debería devolver exactamente el mismo resultado, si tiene una restricción externa en las tablas:

SELECT id, COUNT(*) FROM cart_product WHERE id=3

Tengo una consulta muy simple que en SQL se puede representar de la siguiente manera:

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;

Me sorprendió mucho al usar Slick DSL para representar la consulta anterior, la consulta generada desde el siguiente DSL :

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) }

Se ve como sigue:

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;

¿Qué estoy haciendo mal? ¿Es normal ver tales consultas anidadas? ¿Cuál es el punto de usar Slick DSL si la complejidad de la consulta crece tan rápidamente? Probablemente podría escribir SQL nativo sin embargo realmente me gustó Slick DSL . ¿Cuáles son las técnicas de optimización de consultas Slick ?