Я пытаюсь улучшить выполнение какого-либо запроса, который объединяет две таблицы, я добавил индекс с именем skuconf для colum SKUConfig в таблицу gio_A_Master_SL_temp и индекс с именем skuconf для sku_config столбца в таблице gio_cat_hist_SL_temp, но я могу видеть команду объяснить, что индексы не используются в соединении таблиц (только в создании производных таблиц)Индексы, которые не используются в соединении mysql
здесь запрос
EXPLAIN SELECT
a.Country,
a.MonthNum,
a.CatBP,
a.Cat1,
a.Cat2,
a.Cat3,
sum(a.SKU_sold) as SKU_sold,
sum(a.items) AS items,
sum(a.Revenue) AS revenue,
sum(b.SKU_visible) AS SKU_visible
FROM
(SELECT
Country,
MonthNum,
SKUConfig,
CatBP,
Cat1,
Cat2,
Cat3,
count(DISTINCT SKUConfig) AS SKU_sold,
sum(OrderAfterCan) AS items,
sum(NMV) AS Revenue
FROM
gio_A_Master_SL_temp
GROUP BY
SKUConfig) a
LEFT JOIN
(SELECT
sku_config,
count(*) AS SKU_Visible
FROM
gio_cat_hist_SL_temp
GROUP BY
sku_config) b ON a.SKUConfig = b.sku_config
GROUP BY a.CatBP, a.Cat1, a.Cat2, a.Cat3
;
и вот изображение результатов EXPLAIN
Столбцы я добавил индексы для типа являются VARCHAR (28), и оба из них имеют те же параметры сортировки, как показывают по команде SHOW FULL COLUMN
SKUconfig varchar(28) utf8_general_ci YES MUL select,insert,update,references
sku_config varchar(28) utf8_general_ci YES MUL select,insert,update,references
Я не знаю, whay индексы не используются соединением, есть ли способ заставить индекс работать для соединения таблиц ?. Также приветствуется любая рекомендация по улучшению запроса. заранее спасибо.
Насколько велики таблицы? Использование индекса, а затем поиск имеет стоимость, поэтому иногда cheapper просто выполняет полное сканирование. Также вы присоединяетесь к индексированным таблицам. Вы создаете временную таблицу с 'group by'. –
@JuanCarlosOropeza Даже без 'group by', подзапросы, вероятно, исключают индексы из рассмотрения в' join' (хотя они могут помочь разделить 'group' s. – Uueerdo
@Uueerdo Это то, что я сказал, когда упоминаю временную таблицу , isnt? –