Многократные объединения SQL с использованием первичных ключей только один имеет тип = eq_ref на EXPLAIN - PullRequest
0 голосов
/ 05 июля 2018

Итак, у меня есть база данных с около 40000 записей, и у каждой записи есть два поля идентификатора, которые относятся к разным таблицам. Пример запроса будет:

SELECT a.*, c.full_name, em.full_name FROM records AS r JOIN customers c ON a.customer_id = c.customer_id JOIN employees em ON a.employee_id = em.employee_id

Этот запрос занимает около 5 секунд. Когда я пытаюсь EXPLAIN запрос, я вижу, что таблица клиентов имеет type eq_ref, в то время как таблица сотрудников имеет type ALL, хотя оба условия соединения ссылаются на первичный ключ соединенный стол Это явно сильно замедляет запрос, поскольку EXPLAIN показывает, что таблица клиентов использует только 1 строку, а таблица сотрудников - 474 строки. Почему таблица сотрудников не объединяется как type из eq_ref и использует только 1 строку?

Image of results from MySQL optimizer

...