tabla de MySQL join tomar demasiado tiempo, mientras que seleccionar los resultados simples rápida

votos
-1

Tengo una tabla InnoDB daily_sales_msr.

Cuando ejecuta una consulta de esa tabla sin unirse, la consulta devuelve la salida rápidamente.

Pero, si me uno a esa mesa, incluso con una pequeña mesa, a continuación, se tarda demasiado tiempo. ¿Cuál es la solución a este problema?

Por ejemplo:

SELECT
sku.ssku,
ROUND(SUM(daily_sales_msr.sale), 3) AS sale,
MONTHNAME(daily_sales_msr.date) AS `month`
FROM
daily_sales_msr
INNER JOIN sku ON sku.id = daily_sales_msr.skid
WHERE
daily_sales_msr.date BETWEEN '2018-08-01'
AND '2018-08-08'
GROUP BY
daily_sales_msr.skid

Esta consulta tarda más de 1000.

Sin unirse sólo se necesita 0.15s.

Publicado el 02/09/2018 a las 05:26
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

para un rendimiento asegurarse de que tiene el índice adecuado
en su caso, se puede usar un índice compuesto de

table daily_sales_msr for  columns  (skid,date) 

y para SQL está utilizando por grupo, pero algunos de la columna en selecto no en el grupo no están relacionados con la función de agregación presente en la mayoría de motor de base e en MySQL 5.7 se forma a partir notb alloed por defualt .. el resultado de estas columnas es impredecible por lo se debe añadir estas columnas para agrupar por

SELECT
  sku.ssku,
  ROUND(SUM(daily_sales_msr.sale), 3) AS sale,
  MONTHNAME(daily_sales_msr.date) AS `month`
FROM  daily_sales_msr
INNER JOIN sku ON sku.id = daily_sales_msr.skid
WHERE  daily_sales_msr.date BETWEEN '2018-08-01'  AND '2018-08-08'
GROUP BY  daily_sales_msr.skid, month 

o usar una función de agregación también para estas columnas

SELECT
  sku.ssku,
  ROUND(SUM(daily_sales_msr.sale), 3) AS sale,
  MAX(MONTHNAME(daily_sales_msr.date)) AS `month`
FROM  daily_sales_msr
INNER JOIN sku ON sku.id = daily_sales_msr.skid
WHERE  daily_sales_msr.date BETWEEN '2018-08-01'  AND '2018-08-08'
GROUP BY  daily_sales_msr.skid
Respondida el 02/09/2018 a las 06:31
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more