Mysql соединения таблицы занимают слишком много времени, а просто выберите результаты быстро

голоса
-1

У меня есть таблица InnoDB daily_sales_msr.

При запуске запроса из этой таблицы, не вступая, запрос возвращает результат быстро.

Но, если я присоединюсь к этой таблице даже с небольшим столом, то это занимает слишком много времени. Что такое решение этой проблемы?

Например:

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

Этот запрос занимает больше, чем 1000s.

Без всякого вступления он принимает только 0.15s.

Задан 02/09/2018 в 05:26
источник пользователем
На других языках...                            


1 ответов

голоса
1

для выполнения убедитесь , что у вас есть надлежащий индекс
в вашем случае вы можете использовать композитный индекс по

table daily_sales_msr for  columns  (skid,date) 

и для SQL вы используете группу, но некоторые из столбца выберите не в группе, не связаны с функцией агрегации это в большинстве дб двигатель е в MySQL начиная с формы 5.7 notb alloed по DEFUALT .. результат для этих столбцов непредсказуема так вы должны добавить эти столбцы в группе

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 

или использовать функцию агрегации и для этих столбцов

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
Ответил 02/09/2018 в 06:31
источник пользователем

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