当前位置: 首页 > news >正文

电商-订单查询优化方案 - 努力-

  一、 为什么要优化订单查询?


  1)订单查询是一个高频接口,并且订单数据非常大。
  2)面向C端用户的订单查询接口其访问量非常大。
  3)对于运营端的订单查询接口虽然访问量不大但由于订单数据较多也需要进行优化,提高查询性能。

 

  二、 确定优化方向


 面向查询类的接口的优化方向是什么呢?
  1)使用缓存。
  将查询的订单数据进行缓存,提高查询性能。
  2)优化数据库索引提高查询性能。
  当缓存中没有时或缓存过期时会从数据库查询数据,通过添加数据库索引去提高数据库的查询性能。

  三、 订单详情优化方案。


  针对单条订单信息查询接口可以使用缓存进行优化。
  对于单条订单信息查询接口通过快照查询接口查询订单的详情信息。
  参考AbstractStateMachine类的String getCurrentSnapshotCache(String bizId)快照查询方法,将快照信息缓存到 redis提供查询效率。
  根据订单Id查询缓存信息,先从缓存查询如果缓存没有则查询快照表的数据然后保存到缓存中。缓存设置了过期时间是30分钟。
  当订单状态变更,此时订单最新状态的快照有变更,会删除快照缓存,当再次查询快照时从数据库查询最新的快照信息进行缓存。

 1

 

  四、 用户端订单列表优化方案

 

  用户端通过小程序查询订单列表,界面上没有分页查询的按钮,用户端查询订单列表可采用滚动查询的方法。
  滚动查询就是一次查询指定数量的记录,不用进行count查询,省去count查询的消耗。


  具体方案如下:

  1. 首先查询符合条件的订单ID。

  由于是滚动查询需要传入滚动ID,这里我们在订单表使用排序字段sort_by作为滚动ID。
  滚动ID是一种递增的序列号,按服务预约时间降序排列且滚动ID具有唯一性,滚动ID的规则是:服务预约时间+订单号后5位。
  滚动查询方式: 按SORT_BY降序,取小于SORT_BY的n条记录 第一页传入SORT_BY参数为空 从第二页开始传入上一页最后一条记录的SORT_BY
  示例:

 2

 

  2. 使用覆盖索引优化
  根据查询条件查询符合条件的订单ID,这里使用覆盖索引优化的方法。
  我们知道在InnoDB存储引擎中有两种索引存储形式:

 

youhua1-3

 


  

 

 

  聚集索引:查询条件只有主键的情况会通过聚集索引查询。
  非聚集索引:查询条件有多个,此时为了提高查询效率可以创建多个字段的联合索引,根据非聚集索引找到符合条件主键,如果要查询的列只有索引字段则通过非聚集索引直接拿到字段值返回,如果要查询列有一部分在索引之外此时会进行回表查询聚集索引最终拿到数据。

示例:

  user表(id、name、 age、address)对name、age创建联合索引。
  sql1:
  select id、name、age from user where name=? and age =?
  该查询直接从索引中拿到符合条件的数据,不存在回表查询。

  sql2:
  select * from user where name=? and age =?
  该查询列是select * ,address没有包含在索引中,where条件通过联合索引找到符合条件的主键,再通过主键回表查询聚集索引,最终拿到数据。

  覆盖索引是什么呢?
  覆盖索引是一种优化手段,上边的sql1就是实现了覆盖索引。

  覆盖索引(covering index)指一个查询语句的执行只需要从非聚集索引中就可以得到查询记录,而不需要回表去查询聚集索引,可以称之为实现了索引覆盖。
  根据上边的需求,我们根据查询条件建立联合索引,通过联合索引找到符合条件的订单ID(主键),从索引中找到的符合条件的订单ID无需回表查询聚集索引。

 

  3. 使用订单ID匹配缓存,如果有缓存则直接获取否则从数据库查询。

 3

 

  五、运营端订单列表优化方案


  运营端订单列表由于访问量不大这里无需使用缓存,实现方案是首先通过覆盖索引查询符合条件的订单ID,再根据订单ID查询聚集索引拿到数据。
  我们根据查询条件创建的联合字段索引是非聚集索引,先从非聚集索引中查询到符合条件的ID,再根据订单ID从聚集索引中查找数据。

http://www.sczhlp.com/news/181413/

相关文章:

  • 2025 年折弯机厂家最新推荐排行榜:数控 / 电液伺服 / 液压机型权威测评,领先企业深度解析
  • 2025 年最新推荐切割机厂家排行榜:全包围 / 半包围激光切割机及金属、等离子切割机优选品牌单平台光纤激光/大功率光纤金属/全自动等离子切割机厂家推荐
  • 2025航空插头实力厂家最新推荐排行榜:技术精湛与品质卓越的
  • Springboot项目开发一览 - 吾辈当奋斗
  • 扬中网站优化哪家好asp 网站建设教程
  • 淘客网站咋做拓者设计吧网页版
  • 网站建设考核表西安百度快照优化
  • 手机网站什么意思有没有网站做lol网站的
  • 深圳网站建设就q479185700顶上网站开发报价单模板
  • 播放量网站推广免费淘宝关键词优化怎么弄
  • android网站开发大良营销网站建设好么
  • 国外哪些网站做产品推广比较好cmd iis网站
  • 衡水高端网站建设网上购物流程
  • 南宁中小企业网站制作wordpress的博文页面如何自定义
  • 网站建设费与无形资产阿里云智能logo设计网站
  • 禅城做网站头条发布视频成功显示404
  • 注册网站的免费网址是什么东莞网站建设品牌公司
  • 完整网站开发教程有网络但是网页打不开
  • 餐饮企业网站设计wordpress 5.0.1编辑器
  • 网站域名优势广州昨天发生重大新闻
  • 吉林市建设工程档案馆网站吉安网页制作公司
  • 贵阳网站设计与开发怎么做广告营销是做什么的
  • 方特网站是谁做的雅布设计平面
  • 北京网站关键词优化河北邢台封闭最新消息
  • 主机如何做服务器建网站公司要做网站去哪里
  • 长沙网站推广工具营销网站建设教学
  • joomla 网站建设教程网站建设简介是什么
  • 网站开发有什么语言photoshop在线制作
  • 酒店网站的开发及其设计方案农产品网络营销
  • 百讯科技网站建设旅游酒店网站建设