专栏名称: 人工智能与大数据技术
分享大数据、云计算、人工智能等高科技先进技术
目录
相关文章推荐
数据派THU  ·  覆盖2亿分子质谱图,捷克科学院发布DreaM ... ·  2 天前  
CDA数据分析师  ·  CDA数据分析人才能力模型与认证体系简介​( ... ·  4 天前  
人工智能与大数据技术  ·  天塌了,Claude全面断供Windsurf ... ·  3 天前  
51好读  ›  专栏  ›  人工智能与大数据技术

牛批!一张6000w数据表的查询优化到0.023s

人工智能与大数据技术  · 公众号  · 大数据  · 2021-03-18 17:05

正文

请到「今天看啥」查看全文



Map orderTime = orderByTime();
// 得到开始和结束时间
if (SysFun.isNotEmpty(orderTime) && orderTime.size() > 0 ){
orderTime.put( "startTime" ,startTime);
orderTime.put( "endTime" ,endTime);
orderTime.put( "tableName" ,tabaleName);
int i= 0 ;
for (;;) {
System. out .println( "进入循环" );
// 转移数据
int rst =  dataTransfer(orderTime);
// 删除重复数据
int delt = deleteDataTransfer(orderTime);
// 当今天数据转移完成时,退出本次循环
if (rst<= 0 && delt <= 0 ){
break ;
}
i++;
System. out .println( "转移数据表为:" +tabaleName+ " 转移数据次数: " +i);
}
}
System. out .println( "定时器结束运行------------------------------------------" );
}

心路历程

方法完成之后,上周五去服务器正式实测,实测时方法用 @PostConstruct 修饰,会在服务器加载 Servlet 的时候运行,并且只会被服务器执行一次。


当时控制台打印: (“定时器开始运行”)卡住,去库中看到表已成功创建。


开始以为是某个地方异常了,后面逐一打印步骤发现是得到最远时间段是卡住了,也就是被一条 SQL 查询卡住了(直接用这条 SQL 去库里查询 300s+ 也没查询出来)。


然后维护这个库的小伙跟我说: 要不直接 limit 1 吧,它的插入是根据时间顺序插入的,当时也想到了会出问题,时间顺序肯定不可能完全按照顺序写入。







请到「今天看啥」查看全文