面试题答案
一键面试查询语句
SELECT customer_id
FROM orders
WHERE YEAR(order_date) = 2023
AND order_id IN (
SELECT order_id
FROM order_items
GROUP BY order_id
HAVING SUM(quantity) > 100
);
优化建议
- 索引优化:
- 在
orders
表的order_date
字段上创建索引,以加速按日期过滤。例如:CREATE INDEX idx_order_date ON orders(order_date);
- 在
order_items
表的order_id
和quantity
字段上创建联合索引,以加速分组和聚合操作。例如:CREATE INDEX idx_order_id_quantity ON order_items(order_id, quantity);
- 在
- 使用
JOIN
替代子查询:
SELECT o.customer_id
FROM orders o
JOIN (
SELECT order_id
FROM order_items
GROUP BY order_id
HAVING SUM(quantity) > 100
) oi ON o.order_id = oi.order_id
WHERE YEAR(o.order_date) = 2023;
这种方式避免了子查询中的嵌套,通常在执行效率上会有所提升。同时,也可以利用上述提到的索引来进一步优化查询性能。