无聊的的随笔记录

啰哩啰唆,只是自己mark下。看到请绕道:)

相关的5个表:


1)订单表order    100W量 主键order_id

2)订单明细order_deatil(所购买的商品明细)  500W量  主键order_deatil_id    存订单表order_id

3)商品表goods

4)订单log记录order_detail_log表 每次对商品订单的操作都记录。3000W量 ,(没有在此表记录申请退款的时间)

 字段:

  order_id 订单id

   order_deatil_id  订单明细id

  status   状态  status为操作后的订单的状态

  create_time 时间

  opt 操作人

  desstr 描述信息。

每个order_deatil_id作为记录单位

下单、支付成功 、申请退款等每个对订单明细的操作都记录 。

5)退款表order_refund  (退款在单条的order_deatil上申请,不在order上申请)   10W

业务流程:

1.下单成order  order_datail

   order_detail_log做记录,动作为下单成功,状态为下单成功INIT

2.支付成功:

 修改order   order_datail状态为成功

order_detail_log做记录,动作为支付成功,状态为支付成功SUCCESS

3.用户申请退款(针对单条的order_datail申请,不是针对整个order)

   修改order_datail 状态为退款审核中

order_detail_log做记录,动作为退款申请,状态为退款审核中

4.运营审核(针对单条的order_datail):

审核不通过  将order_datail修改为支付成功状态。

order_detail_log做记录,动作为退款拒绝,状态为退款拒绝

5。用户可继续申请第3 步骤。

这样order_detail_log每次都会记录用户申请退款的动作。

6.退款申请通过时,插入order_refund表

order_detail_log做记录,动作为退款通过,状态为退款成功

退款成功了就不能再次申请了~


 需求:要查询申请退款时间在某个时间段内的订单明细数据

需要用到order_datail order_detail_log 2个表

order_detail_log的status为退款审核中的order_datail_id

order_detail_log数据量3000W。增长很快。查询越来越慢。

解决方案:

1、在order_detail_log增加索引。status,会快很多。一段时间内,没问题,但是查询时间段大的时候可能会慢。
项目分成2次查询先查order_detail_log 符合时间的order_detail_id

再用sql: order_datail.order_datail_id in( '在order_detail_log中查出的order_detail_id集合')  in当中条数多的时候会很慢。

前人开发时没敢直接把这2个表做join可能怕查死了。。。

2. 修改业务逻辑:

   退款申请时直接插入order_refund表(退款审核中),不在审核通过时插入,

  退款拒绝时将order_refund表状态改为退款拒绝

对可能驳回后,又申请的:order_refund表无数据,可申请,有数据状态为退款拒绝也可申请,再申请时将该条数据改为退款申请中,时间操作人等也修改。

这样查询申请退款时间 关联order_detail 和order_refund(状态不为驳回的)两个表。不再去超大的log表查询

3.在order_detail表加上申请退款时间的字段,加索引。


1.不用改现在的代码。可以运行一段没问题。

2.改动了现在的业务逻辑。代码改动稍微大一些

3.改动业务逻辑。表清晰了。不用关联别的表了。但是order_detail表已经有好多索引了。。(哪个项目这样的明细表不都得弄个 3 4个索引了~)

个人倾向:加完log的索引之后,按2修改。。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值