面试题答案
一键面试表结构优化
- 添加索引:
- 在
products
表的product_id
和category_id
字段上添加索引。因为查询涉及到按商品类别统计金额,category_id
索引有助于快速定位商品类别相关记录。
CREATE INDEX idx_product_id ON products(product_id); CREATE INDEX idx_category_id ON products(category_id);
- 在
orders
表的customer_id
和order_id
字段上添加索引。customer_id
索引用于快速定位每个客户的订单,order_id
索引有助于连接orders
表和order_items
表。
CREATE INDEX idx_customer_id ON orders(customer_id); CREATE INDEX idx_order_id_orders ON orders(order_id);
- 在
order_items
表的order_id
、product_id
字段上添加索引。order_id
索引用于连接orders
表和order_items
表,product_id
索引用于连接order_items
表和products
表。
CREATE INDEX idx_order_id_order_items ON order_items(order_id); CREATE INDEX idx_product_id_order_items ON order_items(product_id);
- 在
优化后的SQL查询语句
SELECT
o.customer_id,
p.category_id,
SUM(oi.quantity * p.price) AS total_amount
FROM
orders o
JOIN
order_items oi ON o.order_id = oi.order_id
JOIN
products p ON oi.product_id = p.product_id
GROUP BY
o.customer_id, p.category_id
ORDER BY
o.customer_id, p.category_id;