Запрос занимает слишком много времени. Как я могу его оптимизировать?

SELECT a.a1 as r1, b.b1 as r2, c.c1 as r3, d.d1 as r4
FROM a 
LEFT JOIN b ON a.id = b.a_id
LEFT JOIN c ON a.id = c.a_id
LEFT JOIN d ON b.id = d.b_id
WHERE a.id = {id};
0
daviondk 4 Сен 2020 в 14:45

1 ответ

Лучший ответ

С запросом left join вы можете сосредоточиться на первой таблице. Это предлагает индексы на:

  • a(id)
  • b(a_id, b_id)
  • c(a_id)
  • d(b_id

Вы также можете включить выбранные столбцы после этих столбцов.

Если a.id объявлен как первичный ключ, а другие столбцы объявлены с использованием отношений внешнего ключа, то MySQL создает (почти точно) эти индексы - и производительность должна быть хорошей.

Обратите внимание, что большинство баз данных не создают индексы с объявлением foreign key, но MySQL делает.

1
Gordon Linoff 4 Сен 2020 в 11:47