wb_it_man
2021-06-08 10:21
采纳率: 92.9%
浏览 171
已采纳

代码中需要多次查询数据库,很耗时,如何优化

数据库内8个字段,每次收到1-2个字段,存入数据库,后来的数据存入的时候,需要将前面的数据查询出来,数据量大的时候,这个接口需要执行30s。具体业务流程:前端发来用户数据,接口解析json后,存入数据库,但是前端没有按照数据库规范建类,所以需要分开存储字段,先接受到的,先存进表中,后来的数据,根据主键把之前存的查出来,再和后来的数据一起存入。传来的数据量比较大,其中用到不少循环,和数据库查找,比较耗时。

已经做了的优化:

1.数据库表加索引

2.避免循环中创建对象

 

请问还有什么优化的好思路嘛?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • 得一以生 2021-06-08 11:10
    已采纳

    后来的数据存入的时候,需要将前面的数据查询出来-----------没理解这个操作的背景,具体业务步骤是什么呢?

    打赏 评论
  • li.siyuan 2021-06-08 10:27

    写存储过程, 在数据库里操作, 去掉多余的访问数据库的操作, 这样就可以加快一些

    打赏 评论
  • 用redis先把先到的数据存起来,然后在最后一起存起来

    打赏 评论
  • qq_46879872 2021-06-08 10:36

    检查索引有没有生效,字段如果值大量重复是不适合建索引的

    打赏 评论
  • 木子雷 2021-06-08 10:47

    1、通过你的描述发现不太清楚具体的流程,但是可以知道你是多次查询表数据,发现表中数据很多时查询非常慢;
     

    解决方案:
     

    1、进行分表,通过 一致性hash算法 + 分片字段 对查询SQL语句路由到分表后的某张表中,此时分表中的数据是未分表前的其中一部分,数据量偏小,查询会快很多

    2、如果现有项目没有使用分表的话,那么从头添加分表会麻烦很多;所以如果你的数据库是MySql的话,可以手动开启查询缓存,然后增大innodb缓冲池大小及缓冲池中的查询缓存空间大小,通过查询缓存功能可以相对提升查询速度,但是这只是权宜之计;

    注意:mysql8.0已经废弃了查询缓存功能

    打赏 评论
  • wb_it_man 2021-06-08 11:38

    我更新了问题,讲了一下业务,应该不是分表能解决的,得做缓存

    打赏 评论
  • imepl 2021-06-11 17:43

    考虑用异步线程去存储。

    打赏 评论

相关推荐 更多相似问题