背景:现在暂时处于建表阶段,所以下面暂时只提供需求场景。
列表数据展示列要求:用户名字,用户下单量,最近下单店铺等字段
需求 1:查询在某店铺下在某段时间内下单量在某个范围的用户列表信息。
需求 2:在此基础上继续过滤买过指定某个商品的用户。
需求 3:需要支持订单数据量较大和大批量数据返回的需求。
PS:在业务实现的基础上,尽量提高查询性能。大佬们有什么看法?谢谢大家回复。
根据需求场景,可以设计以下表结构:
- 用户表(user)
- 用户ID(id)
- 用户名字(name)
- 店铺表(shop)
- 店铺ID(id)
- 店铺名字(name)
- 商品表(product)
- 商品ID(id)
- 商品名字(name)
- 订单表(order)
- 订单ID(id)
- 用户ID(user_id)
- 店铺ID(shop_id)
- 商品ID(product_id)
- 下单数量(quantity)
- 下单时间(created_at)
对于需求 1,可以使用以下 SQL 查询语句:
SELECT user.name, SUM(order.quantity) AS order_count, shop.name AS recent_shop
FROM order
INNER JOIN user ON order.user_id = user.id
INNER JOIN shop ON order.shop_id = shop.id
WHERE order.shop_id = :shop_id
AND order.created_at BETWEEN :start_time AND :end_time
AND order.quantity BETWEEN :min_quantity AND :max_quantity
GROUP BY order.user_id
其中,:shop_id、:start_time、:end_time、:min_quantity、:max_quantity 为参数,用于动态设置查询条件。
对于需求 2,在以上 SQL 查询语句基础上添加以下条件:
AND order.product_id = :product_id
其中,:product_id 为参数,用于指定查询的商品ID。
对于需求 3,可以采用以下优化措施:
- 对订单表的 created_at 字段建立索引,加快时间范围查询的速度。
- 对查询语句进行分页处理,避免一次查询返回大量数据。
- 对查询语句进行优化,避免使用子查询或者 JOIN 连接过多表,影响查询性能。
以上仅为表结构和 SQL 查询语句的初步设计,具体实现还需要根据实际业务情况进行调整和优化。