Mysql tábla join túl sok időt, míg az egyszerű válasszuk az eredmények gyors

szavazat
-1

Van egy InnoDB tábla daily_sales_msr.

Amikor fut egy lekérdezést a táblázat csatlakozás nélkül, a lekérdezés kimenete gyorsan.

De, ha csatlakozom a táblázat, hogy még egy kis asztal, akkor túl sokáig tart. Mi a megoldás erre a problémára?

Például:

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

Ez a lekérdezés tovább tart, mint 1000s.

Anélkül, hogy csatlakozott ez mindössze 0.15s.

A kérdést 02/09/2018 05:26
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
1

teljesítmény biztosan van megfelelő index
az Ön esetében jól jönne egy kompozit index

table daily_sales_msr for  columns  (skid,date) 

és az SQL használata csoportot, de néhány oszlop válasszuk nem csoportjában nem kapcsolódó összesítés funkció ezt a legtöbb db motor e mysql kiindulási forma 5.7 notb alloed által defualt .. az eredmény ezeket az oszlopokat annyira kiszámíthatatlan vegye fel ezeket az oszlopokat csoport

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 

vagy használjon egy aggregációs funkció is ezek az oszlopok

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
Válaszolt 02/09/2018 06:31
a forrás felhasználó

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