MST

星途 面试题库

面试题:MySQL中如何优化简单子查询

假设有两个表,`orders` 表包含订单信息(`order_id`, `customer_id`, `order_date` 等字段),`customers` 表包含客户信息(`customer_id`, `customer_name`, `customer_city` 等字段)。现在要查询出所有来自北京的客户的订单信息,写出使用子查询的SQL语句,并阐述如何对这个子查询进行优化。
15.8万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

SQL语句

SELECT *
FROM orders
WHERE customer_id IN (
    SELECT customer_id
    FROM customers
    WHERE customer_city = '北京'
);

优化方式

  1. 索引优化
    • customers 表的 customer_city 字段上创建索引,这样在子查询中过滤 customer_city = '北京' 时能够快速定位数据,减少全表扫描。例如:CREATE INDEX idx_customers_city ON customers (customer_city);
    • orders 表的 customer_id 字段上创建索引,这样在主查询根据 customer_id 筛选订单信息时也能加速查询。例如:CREATE INDEX idx_orders_customer_id ON orders (customer_id);
  2. 使用连接替代子查询:使用 JOIN 操作往往性能更好。例如:
SELECT orders.*
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
WHERE customers.customer_city = '北京';

连接操作在很多数据库中执行计划更优,能够减少查询处理的复杂度和资源消耗。