SQL查询语句
SELECT o.order_id, o.customer_id, o.order_date, o.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
WHERE o.order_date >= '2023-11-01'
AND o.order_date < '2023-12-01'
AND p.category = 'electronics'
AND o.total_amount > 1000;
优化思路
- 索引优化:
- 在
orders
表的 order_date
和 total_amount
字段上创建复合索引。这可以加速 WHERE
子句中对 order_date
和 total_amount
的条件过滤。例如:CREATE INDEX idx_order_date_amount ON orders (order_date, total_amount);
- 在
products
表的 category
字段上创建索引。这样能快速定位到 category
为 'electronics' 的产品记录。即:CREATE INDEX idx_product_category ON products (category);
- 在
order_items
表的 order_id
和 product_id
字段上创建索引,以加快连接操作。可使用:CREATE INDEX idx_order_items ON order_items (order_id, product_id);
- 查询结构优化:
- 合理安排连接顺序。从
orders
表开始连接,因为日期范围过滤可以快速减少数据集,然后连接 order_items
表和 products
表,这样可以避免不必要的数据扫描。
- 数据库配置优化:
- 适当调整数据库的缓存参数,使经常查询的数据能缓存到内存中,减少磁盘I/O操作,提高查询性能。