Table Mysql join prendre trop de temps, alors que les résultats de sélection simple et rapide

voix
-1

J'ai une table InnoDB daily_sales_msr.

Quand je lance une requête de cette table sans se joindre, la requête renvoie la sortie rapidement.

Mais, si je me joins à cette table, même avec une petite table, il prend trop de temps. Quelle est la solution à ce problème?

Par exemple:

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

Cette requête prend plus de 1000s.

Sans se joindre à elle ne prend que 0.15s.

Créé 02/09/2018 à 05:26
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

pour une performance être sûr que vous avez l' indice approprié
dans votre cas , vous pouvez utiliser un indice composite sur

table daily_sales_msr for  columns  (skid,date) 

et pour SQL que vous utilisez groupe en, mais une partie de la colonne sélectionnez pas dans le groupe ne sont pas liés à la fonction d'agrégation ce dans la plupart des moteurs db e dans une base MySQL à partir forme 5.7 est notb alloed par defualt .. le résultat de ces colonnes est tellement imprévisible vous devez ajouter ces colonnes à regrouper par

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 

ou d'utiliser une fonction d'agrégation également pour ces colonnes

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
Créé 02/09/2018 à 06:31
source utilisateur

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