面试题答案
一键面试索引设计
- 单列索引:在
order_amount
字段上创建单列索引,即CREATE INDEX idx_order_amount ON orders (order_amount);
。理由是查询当天订单金额的最大值和最小值主要依赖order_amount
字段,单列索引能加快对该字段的排序和查找操作,在高并发场景下可以快速定位到最值。 - 复合索引:若查询还需要结合当天的日期条件,假设表中有
order_date
字段记录订单日期,可创建复合索引CREATE INDEX idx_order_date_amount ON orders (order_date, order_amount);
。这样在高并发时,先通过order_date
快速筛选出当天订单,再基于order_amount
定位最值,减少数据扫描范围,提升查询效率。
查询语句优化
- 使用聚合函数与索引配合:假设当前数据库支持标准SQL语法,获取当天订单金额最大值的查询语句可写为
SELECT MAX(order_amount) FROM orders WHERE DATE(order_date) = CURDATE();
,最小值查询为SELECT MIN(order_amount) FROM orders WHERE DATE(order_date) = CURDATE();
。这里利用索引能够快速定位到当天订单数据,聚合函数MAX
和MIN
在索引的支持下能高效计算出最值。 - 缓存策略:考虑到高并发场景,为减少数据库压力,可以使用缓存机制。例如,使用Redis缓存当天订单金额的最大值和最小值。当系统启动或有新订单插入时,同步更新缓存中的最值。查询时先从缓存获取,若缓存中没有则查询数据库并更新缓存。这样能大大减少高并发下对数据库的直接查询,提高系统响应速度。
通过上述索引设计和查询优化策略,可以在高并发的电商系统数据库中,快速准确地获取当天订单金额的最大值和最小值。