优化 MySQL 查询:结合 UNION 和 LIMIT 进行多表数据检索
从多个表中检索数据通常需要使用 UNION
组合结果并使用 LIMIT
限制行数。 本指南演示了实现此目标的有效方法。
考虑这样一个场景,您需要从两家特定公司中提取总共 20 个职位列表,每个公司最多 10 个职位。 以下优化查询可实现此目的:
<code class="language-sql">( SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name = 'Company1' ORDER BY name, title LIMIT 0, 10 ) UNION ALL ( SELECT c.name, j.title, j.`desc`, j.link FROM jobs_job j INNER JOIN companies_company c ON j.company_id = c.id WHERE c.name = 'Company2' ORDER BY name, title LIMIT 0, 10 )</code>
效率的关键在于将LIMIT
放在每个单独的SELECT
语句中。这可确保每个公司的结果独立地限制为 10 行。 然后,UNION ALL
运算符(此处用于提高速度;UNION
将删除重复项)组合这些有限的结果集,保证最终输出中最多包含 20 行。
每个子查询中的 ORDER BY
子句在联合操作之前维护按公司名称和职位排序的结果。 这确保了最终组合结果集保持排序。 此方法比在 LIMIT
操作之后应用 UNION
更有效,后者需要在应用限制之前处理所有结果。
以上是MySQL中如何高效组合UNION和LIMIT从多个表中检索数据?的详细内容。更多信息请关注PHP中文网其他相关文章!