记一次查询性能优化,原30s+,现0.5s~20s

原查询sql是 两张大表(用户合同表二百多万,合同信息表三百万)联查并按用户id分组,再左连接上6张小表(小表先根据日期查询并按用户id分组),查询条件是用户或机构,再根据机构排序分页。

优化过程:

0.给相关列添加索引是首先的。

1.因为该查询接口最终返回的是总记录数和当前页的人员信息,所以首先考虑查询总记录时没必要这么多张表关联查询。

2.原查询分页是用的sql语句中的分页,而sql中的分页是需要将全量数据搂出来,再返回分页对应的数据,此处考虑在代码中做分页——Java8 Stream流的skip和limit方法组合使用

3.分析查询条件是人员或机构,所以在查询总记录数时,只要影响查询总记录数的表(用户合同表和用户机构表),此处有两种方式:一种是先根据查询条件(人员或机构)查询用户机构表(几千小表),查询出来符合条件的用户,并根据机构排序,再根据用户查询用户合同表(二百多万大表),则返回的记录大小即总记录数;另一种是用户机构表(几千小表)和用户合同表(二百多万大表)根据用户id关联,再根据查询条件(人员或机构)查询,并根据机构排序,则返回的记录大小即总记录数。通过在程序中打印耗时,发现方式一更快,耗时更少。

4.排序:接3的方式一,使用用户机构表查询出来符合条件的用户集合和用户合同表查询出来符合条件的用户集合整

记一次查询性能优化,原30s+,现0.5s~20s相关推荐

  1. 记一次mysql性能优化过程

    2019独角兽企业重金招聘Python工程师标准>>> 转发自:记一次mysql性能优化过程 由于配置是运行过那么长时间,很稳定,基本上不考虑,所以本次主要是sql的优化,并且集中在 ...

  2. 高性能MySQL-3rd-(六)查询性能优化

    2019独角兽企业重金招聘Python工程师标准>>> /* * -------------------------------------------------------- * ...

  3. 记一次前端性能优化——vue-cli4优化首屏加载

    记一次前端性能优化--vue-cli4优化首屏加载 一.前言 vue.js是一款时下非常流行的前端框架,很多公司,例如阿里.腾讯.字节等都在积极应用vue作为前端开发框架.这就说明,熟练使用vue开发 ...

  4. Sql Server查询性能优化之索引篇【推荐】

    Sql Server查询性能优化之索引篇[推荐] 这篇是索引系列中比较完整的,经过整理而来的 一 索引基础知识 索引概述 1.概念 可以把索引理解为一种特殊的目录.就好比<新华字典>为了加 ...

  5. MySQL系列-- 4. 查询性能优化

    4. 查询性能优化 4.1 为什么查询速度会变慢 快速查询取决于响应时间 如果把查询看成是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消 ...

  6. 数据库查询性能优化之利器—索引(二)

    数据库查询性能优化之利器-索引(二) 在前面一篇文章中谈到适当地建立索引能够大幅度地提升SQL语句查询速度,然而并不是在什么情况下都适合建立索引,下面来谈一下什么情况下适合建立索引.建立什么样的索引以 ...

  7. SQL Server 查询性能优化——覆盖索引(二)

    在SQL Server 查询性能优化--覆盖索引(一)  中讲了覆盖索引的一些理论. 本文将具体讲一下使用不同索引对查询性能的影响. 下面通过实例,来查看不同的索引结构,如聚集索引.非聚集索引.组合索 ...

  8. 查询性能优化(使用 Explain 进行分析、优化数据访问、重构查询方式)、存储引擎(InnoDB/MyISAM)

    1.查询性能优化 1.1 使用 Explain 进行分析 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 比较重要的字段有: select ...

  9. 读薄《高性能MySql》(四)查询性能优化

    读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...

最新文章

  1. python读数据-如何用Python读取开放数据?
  2. mysql 更新多条id键值相同记录中的最新(最后一条)记录
  3. 趣学python3(46)--求素数
  4. predicate 列存储索引扫描_ColumnStore index (列存储索引)解析
  5. POJ-2773 欧几里得 + 二分 + 容斥
  6. 在leveldb中,为什么要有immutable memtable?
  7. tail,more查看日志(定点和翻页)
  8. php dirname(_FILE_)
  9. 基于VUE,VUX组件开发的网易新闻页面搭建过程
  10. wordpress本地网站怎么搬到服务器,如何把wordpress从本地服务器迁徙到网站主机上...
  11. tcpip详解卷一第3章(1)
  12. 正则表达式 - 中文、英文姓名匹配
  13. oracle hcm cloud价格,Oracle HCM
  14. 安全事件关联分析方法
  15. RFC1867协议介绍
  16. outlook2016服务器设置不能修改,求助,outlook2016签名也无法编辑和修改,请工程师解决...
  17. 2022年旅游业数据分析报告
  18. java中英文汉语混合排序_Java编程实现中英混合字符串数组按首字母排序的方法...
  19. C语言 指针的解引用详解
  20. Qt程序打包发布方法(使用官方提供的windeployqt工具) 转自:http://tieba.baidu.com/p/3730103947?qq-pf-to=pcqq.group Qt 官方

热门文章

  1. mac book pro高清录屏教程(obs录屏+麦克风录制+soundflower电脑声录制)三合一
  2. 豌豆荚搜索手机中的游戏app形成列表的原理
  3. 《黑马程序员》 category分类的使用(Objective - c语法)
  4. HTML设置字体大小自适应屏幕与echarts图表颜色根据数据大小实时刷新图表颜色
  5. Gitea配置文件说明
  6. 【面试题记录】2020前端秋招笔试面试题目记录
  7. ERROR 1366 (HY000): Incorrect string value: ‘\xE8\xB5\xB5\xE9\x9B\xB7‘ for column ‘s_name‘ at row 1
  8. 企业搭建私域流量的正确打开方式
  9. 大小口圆锥台计算机,2011年对口单招计算机试卷A04(18页)-原创力文档
  10. linux 中du和df的使用