У меня следующая структура базы данных:
, где таблица 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