Прежде всего, например, у меня есть 3 таблицы A, B, C. Таблица A имеет отношение к таблице B, а таблица имеет отношение к таблице C. Я хочу получить SUM некоторого поля из таблицы A, которая зависит на некоторых полей из таблицы C.MySql странная производительность
Таблица А имеет> 300 тыс строк, таблица B имеет> 4k строк таблицы с имеет ~ 100 строк
Мой запрос выглядит следующим образом: выполнение
SELECT SUM(a.hours) AS total
FROM table_a a
LEFT JOIN table_b b
ON a.table_b_id = b.id
LEFT JOIN table_c c
ON b.table_c_id = c.id
WHERE a.customer_id = 1
AND c.title IN ('Title D','Title E')
запросов время ~ 7 секунд, это очень медленно. Но время выполнения запроса, как показано ниже, составляет ~ 0,0 сек.
SELECT a.hours
FROM table_a a
LEFT JOIN table_b b
ON a.table_b_id = b.id
LEFT JOIN table_c c
ON b.table_c_id = c.id
WHERE a.customer_id = 1
AND c.title IN ('Title D','Title E')
Почему СУМ так медленно? что мне делать?
У вас есть указатель на заголовок в таблице C? – MartianCodeHound
Ваш первый запрос на самом деле такой же, как с использованием INNER JOINs, а MySQL довольно глупо в оптимизации бесполезных внешних соединений. И второй запрос может быть таким же, как и никакое соединение вообще, если есть правильные отношения PK-FK (и, возможно, MySQL может устранить ненужные объединения, но я так не думаю) – dnoeth
Почему это связано с mongodb и postgresql? –