MST

星途 面试题库

面试题:MySQL子查询优化之转换为JOIN基础

假设有两个表,`orders`表包含订单信息(`order_id`、`customer_id`、`order_date`等字段),`customers`表包含客户信息(`customer_id`、`customer_name`等字段)。现有一个子查询,用于查找在2023年10月1日之后下单的客户姓名,子查询语句如下:`SELECT customer_name FROM customers WHERE customer_id IN (SELECT customer_id FROM orders WHERE order_date > '2023 - 10 - 01');` 请将此子查询转换为JOIN形式,并说明转换后的JOIN查询相比原查询在性能上可能有哪些提升。
15.9万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
SELECT c.customer_name
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE o.order_date > '2023 - 10 - 01';

性能提升说明

  1. 减少查询次数:子查询会先执行内部子查询,再将结果用于外部查询,需要进行多次查询。而JOIN查询是在一次查询操作中同时关联两个表,减少了查询操作的次数,在大数据量时能节省时间。
  2. 执行计划优化:数据库优化器对JOIN查询的执行计划优化能力通常更强。JOIN能让优化器根据表结构、索引等信息,更有效地选择连接算法(如嵌套循环连接、哈希连接等),从而提高查询效率。例如,若orders表的order_date字段和customers表的customer_id字段上都有索引,JOIN查询可以更好地利用这些索引来加速数据检索,而子查询在利用索引方面可能存在局限性。