mysql - 如何在 5 个嵌套表上执行 MySQL 左连接?
问题描述
我有以下数据库结构:
其中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
我在prefix_dt
表中有 300 万条记录,因此查询大约需要 20 秒才能运行。我也尝试过子查询,但没有任何运气。我仅限于使用相同的数据库结构。任何人都知道在单个查询中获取数据而不需要 20 多秒的更好方法吗?
这是带有示例数据的 DB Fiddle: https ://www.db-fiddle.com/f/eEGX8Z2gxrEzhptZsDF9hR/1
解决方案
推荐阅读
- ruby - 从类外部访问实例变量
- python - cv2.CascadeClassifier.detectMultiScale() 以 -215 失败:断言失败
- python - 试图将 2 个变量相乘,但我不断收到错误消息
- elasticsearch - 在 logstash 过滤器中使用 es_bulk 编解码器
- c++ - C++ 重载模式:使用可变 lambda 调用解析
- firebase - Firebase 控制台删除部分项目
- python - 在日期上循环函数 - Python
- c# - 在 http 中加载 url 时 Application_BeginRequest() 没有被触发
- vue.js - 组件动态导入失败
- ocr - Tesseract 是否可以显示字符的识别百分比?