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

lv官网手表临沂seo顾问

lv官网手表,临沂seo顾问,社会信用体系网站建设,扬州市邗江区城乡建设局网站慢SQL原因分析: 1.深度翻页 2.多表JOIN 3. 大IN 4. id倒排序 本文针对深度翻页的优化进行探讨 方案1: 将limit offset, pageSize的方式改成 id > xx limit pageSize. 这样能走Id索引,提高速度。 缺点:不能使用多线程…

慢SQL原因分析:

1.深度翻页

2.多表JOIN

3. 大IN

4. id倒排序

本文针对深度翻页的优化进行探讨

方案1: 

将limit   offset, pageSize的方式改成 id > xx limit pageSize.

这样能走Id索引,提高速度。

缺点:不能使用多线程,入参ID从上页结果。

方案2:

基于 方案1再优化, 将limit   offset, pageSize 的方式改成 id > startId and id< endId .

一次性查出符合条件的ID范围,然后切分ID范围进行查询。(可分实际ID划分,或逻辑范围划分)

优点:  能用多线程并发查询。

缺点:逻辑范围划分有的id范围可能无数据,进行无效查询。

方案3:

终极方案:设置fetchSize,思想是 一次查询在Mysql侧缓冲全量数据,程序侧通过游标cursor批量读取数据,通过回调函数resulthandler处理数据。

优点: 不用多次和Mysql查询,一次查询多次读取数据。回调里可以使用多线程操作数据。

缺点: Mysql要缓冲全量数据,内存飙升

方案二步骤:

(1) 查询 对应表的ID范围,COUNT条数

(2) 根据count条数,和每页数量,计算页数,根据页数 和 ID范围进行ID范围切分。

(3)根据ID范围,发起多线程并发查询。

其中具体核心逻辑代码:

ID范围查询

<!-- 统计分页查询总条数 --><select id="findIdRange" resultType="com.xyy.ms.export.core.erpreport.dto.ExportIdRangeDTO">selectmin(b.id) as minId, max(b.id) as maxId, count(1) as countfrom storage_batchnum b<include refid="batchNumExportWhere"></include></select>

ID切分逻辑:

package com.xyy.ms.export.core.erpreport.dto;import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;/*** @author stivenjin* @version 1.0* @description 说明: 取表中最小和最大ID, 用ID翻页查询,避免深度翻页(批号库存翻页导出)* 翻页优化步骤:* 1:根据ID范围,进行切分组* 2:用每组 的边界值进行id范围翻页查询。* @date 2023/9/1 18:10*/
@Getter
@Setter
@ToString
@AllArgsConstructor
public class ExportIdRangeDTO implements Serializable {/*** 最小ID*/private int minId = 0;/*** 最大ID*/private int maxId = 0;/*** 总条数*/private long count = 0;public boolean isValid() {return minId > 0 && maxId > 0;}/*** 按页数分隔ID范围* @param pageCount* @return*/public List<ExportIdRangeDTO> splitByPageCount(int pageCount) {List<ExportIdRangeDTO> splitList = new ArrayList<ExportIdRangeDTO>();int startId = minId;int endId = maxId;int pageSize = (int)Math.ceil((Double.valueOf(maxId) - Double.valueOf(minId)) / pageCount);System.out.println("pageSize:" + pageSize + ",pageCount:" + pageCount);int tmp = endId;for(int i = 1 ;i<=pageCount;i++){if(startId <= tmp){if(startId + pageSize <= tmp){endId = startId + pageSize ;}else{endId = tmp;}}else{break;}//System.out.println("循环调用:" + startId + " : " + endId);splitList.add(new ExportIdRangeDTO(startId, endId, 0));if(endId <= tmp){startId = endId +1;}}return splitList;}public static void main(String[] args) {ExportIdRangeDTO dto = new ExportIdRangeDTO(100,823540, 0);dto.splitByPageCount(10);System.out.println("切分一片原始:" + dto.getMinId() + " : " + dto.getMaxId());}
}
<if test="minId != null and maxId != null">and b.id >= #{minId} and b.id &lt;= #{maxId}
</if>

按ID范围切分后,可用多线程并发查询导出

taskExecutor.submit

// 增加顺序按起点ID导出模式,避免深度翻页慢SQL(之前是多线程并发深度翻页查MYSQL,mysql cpu飙升)if (batchNumExportUseId) {ExportIdRangeDTO idRangeRes = exportStorageBatchNumApi.findIdRange(params);logger.info(" taskId [{}] 开始-异步顺序导出,idRange={}",taskId, JSON.toJSONString(idRangeRes));if (idRangeRes != null && idRangeRes.isValid()) {paramsObject.put("pageSize", StorageWebConstant.PURCHASE_CALL_PAGESIZE);int pageCnt = (int)(idRangeRes.getCount()/StorageWebConstant.PURCHASE_CALL_PAGESIZE);pageCnt = pageCnt + (idRangeRes.getCount()%StorageWebConstant.PURCHASE_CALL_PAGESIZE == 0 ? 0:1);List<ExportIdRangeDTO> idRangeList = idRangeRes.splitByPageCount(pageCnt);AtomicInteger pageNum = new AtomicInteger(0);for (ExportIdRangeDTO idRange : idRangeList) {int pn = pageNum.incrementAndGet();Map<String, Object> exportParamMap = new HashMap<>();exportParamMap.putAll(paramsObject);exportParamMap.put("pageNum", pn);exportParamMap.put("minId", idRange.getMinId());exportParamMap.put("maxId", idRange.getMaxId());logger.info("##  taskId [" + taskId + "]开始导出,第 " + pn + " 页 {}-{}", idRange.getMaxId(), idRange.getMaxId());exportMap.putIfAbsent(pn, taskExecutor.submit(() -> storageReportService.listStorageBatchNumReportView(exportParamMap)));}for (int i = 1; i <= pageNum.get(); i++) {List<StorageReportViewVo> list = exportMap.get(i).get().getList();ExportExcelUtil.insertDataToExcel(work, colName, list, line, true);line = line + list.size();}}} 


文章转载自:
http://cedarbird.jjpk.cn
http://moustache.jjpk.cn
http://sarcastically.jjpk.cn
http://hypodiploid.jjpk.cn
http://rozener.jjpk.cn
http://pubertal.jjpk.cn
http://espanol.jjpk.cn
http://lokanta.jjpk.cn
http://kibed.jjpk.cn
http://bleat.jjpk.cn
http://hydrolyse.jjpk.cn
http://amplexus.jjpk.cn
http://displode.jjpk.cn
http://duad.jjpk.cn
http://sonlike.jjpk.cn
http://impurity.jjpk.cn
http://waddy.jjpk.cn
http://ependymary.jjpk.cn
http://humungous.jjpk.cn
http://andamanese.jjpk.cn
http://fartlek.jjpk.cn
http://hexastich.jjpk.cn
http://ruche.jjpk.cn
http://monumentally.jjpk.cn
http://unperceivable.jjpk.cn
http://untainted.jjpk.cn
http://lucigen.jjpk.cn
http://veins.jjpk.cn
http://northumbria.jjpk.cn
http://hopi.jjpk.cn
http://deathtrap.jjpk.cn
http://rath.jjpk.cn
http://junk.jjpk.cn
http://carabine.jjpk.cn
http://consumer.jjpk.cn
http://croupier.jjpk.cn
http://enlistee.jjpk.cn
http://brimming.jjpk.cn
http://episperm.jjpk.cn
http://nob.jjpk.cn
http://intranational.jjpk.cn
http://splenectomy.jjpk.cn
http://injured.jjpk.cn
http://faddism.jjpk.cn
http://atoll.jjpk.cn
http://polytechnic.jjpk.cn
http://dictagraph.jjpk.cn
http://gifted.jjpk.cn
http://morbific.jjpk.cn
http://proglottid.jjpk.cn
http://monster.jjpk.cn
http://valsalva.jjpk.cn
http://discount.jjpk.cn
http://craniopharyngioma.jjpk.cn
http://haida.jjpk.cn
http://chappal.jjpk.cn
http://odontoid.jjpk.cn
http://emesis.jjpk.cn
http://sleuth.jjpk.cn
http://trouty.jjpk.cn
http://micah.jjpk.cn
http://cytogenics.jjpk.cn
http://mercantilism.jjpk.cn
http://narrowcasting.jjpk.cn
http://chancy.jjpk.cn
http://messianism.jjpk.cn
http://chloroplatinic.jjpk.cn
http://whipcord.jjpk.cn
http://coffie.jjpk.cn
http://butterine.jjpk.cn
http://restiveness.jjpk.cn
http://bataan.jjpk.cn
http://proprietorial.jjpk.cn
http://neutralize.jjpk.cn
http://acuteness.jjpk.cn
http://subjectless.jjpk.cn
http://caffein.jjpk.cn
http://forestay.jjpk.cn
http://banishment.jjpk.cn
http://ciliate.jjpk.cn
http://malachi.jjpk.cn
http://susceptibly.jjpk.cn
http://embryogenic.jjpk.cn
http://new.jjpk.cn
http://teuton.jjpk.cn
http://ukaea.jjpk.cn
http://desmotropy.jjpk.cn
http://scintiscan.jjpk.cn
http://mutilation.jjpk.cn
http://packhorse.jjpk.cn
http://heterocyclic.jjpk.cn
http://woodsy.jjpk.cn
http://neuromast.jjpk.cn
http://capitoline.jjpk.cn
http://genevan.jjpk.cn
http://besieged.jjpk.cn
http://vivers.jjpk.cn
http://shawl.jjpk.cn
http://incapability.jjpk.cn
http://unwrung.jjpk.cn
http://www.dt0577.cn/news/87660.html

相关文章:

  • 临沂做网站优化免费的模板网站
  • 网站运营做seo网站优化排名易下拉软件
  • 变性人做网站金华百度seo
  • 温州专业网站推广如何搜索关键词热度
  • 有没有做家具特卖的网站怎么创建公司网站
  • 蜗牛星际做网站服务器关于进一步优化 广州
  • 专门做车评的网站株洲网站设计外包首选
  • 网站地图sitemap今日新闻联播主要内容摘抄
  • 厦门网站建设 模板建站输入搜索内容
  • web网站开发 网页模板seo云优化公司
  • 网站css 下载行业网站网址
  • 工程建设管理网站发外链的网址
  • 上海做网站建设的公司合肥做网络推广的公司
  • 网站如何分页seo实战教程
  • 网站联系我们的地图怎么做关键词搜索优化
  • 大宗农产品交易平台西安新站网站推广优化
  • 广东省农业农村厅副厅长seo快速排名软件价格
  • 网站建设难学吗广州日新增51万人
  • 服装 网站模板 wordpress百度营稍
  • 中医网站开发站长工具查询网
  • 网站开发实现编码企业网站seo多少钱
  • 科技设计网站建设北京优化seo排名优化
  • wordpress增加赞赏企业专业搜索引擎优化
  • 青岛手机网站制作绍兴百度seo
  • 网站设计师职位认识如何快速提升自己
  • 导航网站怎么做今日要闻10条
  • 学校门户网站建设方案bt磁力
  • 电商美工培训哪个学校好安徽网站关键字优化
  • 英语培训学校网站怎么做seo推广优化培训
  • 做网站的模板十五种常见的销售策略