tabella MySQL join prendendo troppo tempo, mentre semplici selezionare risultati veloci

voti
-1

Ho una tabella InnoDB daily_sales_msr.

Quando eseguo una query da quel tavolo senza aderire, la query restituisce rapidamente l'uscita.

Ma, se mi unisco a quel tavolo a anche con un piccolo tavolo, poi ci vuole troppo tempo. Qual è la soluzione a questo problema?

Per esempio:

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

Questa query richiede più di 1000s.

Senza alcun unendo ci vuole solo 0.15s.

È pubblicato 02/09/2018 alle 05:26
fonte dall'utente
In altre lingue...                            


1 risposte

voti
1

per le prestazioni essere sicuri di avere un indice corretto
nel tuo caso si potrebbe usare un indice composito su

table daily_sales_msr for  columns  (skid,date) 

e per SQL si sta utilizzando GROUP BY, ma alcuni della colonna di selezione non nel gruppo non sono relative a funzione di aggregazione presente nella maggior motore di db e in mysql partire modulo 5.7 è notB alloed dal defualt .. il risultato per queste colonne è imprevedibile così si dovrebbe aggiungere queste colonne per raggruppare da

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 utilizzare una funzione di aggregazione anche per queste colonne

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
Risposto il 02/09/2018 a 06:31
fonte dall'utente

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