Как выполнить MySQL Left Join на 5 вложенных таблиц? - PullRequest
0 голосов
/ 11 января 2019

У меня следующая структура базы данных:

enter image description here

, где таблица prefix_dt напрямую соединяется с таблицами prefix_ue и prefix_di, а таблица prefix_di напрямую соединяется с таблицами prefix_dr и prefix_dp.

В настоящее время я выполняю следующий запрос MySQL для получения данных из всех 5 таблиц:

SELECT 
  SQL_CALC_FOUND_ROWS pdt.id as id, 
  CONCAT(
    pue.first_name, ' ', pue.last_name
  ) as name, 
  pdi.download, 
  pdi.version as version, 
  pdi.release_title, 
  pdt.accepted_licence as accepted_licence, 
  pdt.download_date as download_date 
FROM 
  prefix_dt pdt 
LEFT JOIN prefix_ue pue ON pue.users_id = pdt.user_id 
LEFT JOIN (
  SELECT 
    pdi.id, 
    pdi.version as version, 
    pdr.title as release_title, 
    pdp.title as download 
  FROM 
    prefix_di pdi 
    LEFT JOIN prefix_dr pdr ON pdr.id = pdi.release_id 
    LEFT JOIN prefix_dp pdp ON pdp.download_id = pdi.download_id 
  WHERE 
    pdp.language_id = 1
  ) as pdi ON pdt.download_item_id = pdi.id 
WHERE 
  1 = 1 
GROUP BY 
  pdt.id 
ORDER BY 
  id asc 
LIMIT 
  0 , 10

У меня 3 миллиона записей в таблицах prefix_dt, поэтому выполнение запроса занимает около 20 секунд. Я пробовал подзапросы также без какой-либо удачи. Я ограничен в использовании той же структуры базы данных. Кто-нибудь знает лучший способ получить данные в одном запросе, и это не займет более 20 секунд?

Вот база данных Fiddle с примерами данных: https://www.db -fiddle.com / ж / eEGX8Z2gxrEzhptZsDF9hR / 1

...