数据库内8个字段,每次收到1-2个字段,存入数据库,后来的数据存入的时候,需要将前面的数据查询出来,数据量大的时候,这个接口需要执行30s。具体业务流程:前端发来用户数据,接口解析json后,存入数据库,但是前端没有按照数据库规范建类,所以需要分开存储字段,先接受到的,先存进表中,后来的数据,根据主键把之前存的查出来,再和后来的数据一起存入。传来的数据量比较大,其中用到不少循环,和数据库查找,比较耗时。
已经做了的优化:
1.数据库表加索引
2.避免循环中创建对象
请问还有什么优化的好思路嘛?
后来的数据存入的时候,需要将前面的数据查询出来-----------没理解这个操作的背景,具体业务步骤是什么呢?
检查索引有没有生效,字段如果值大量重复是不适合建索引的
写存储过程, 在数据库里操作, 去掉多余的访问数据库的操作, 这样就可以加快一些
用redis先把先到的数据存起来,然后在最后一起存起来
1、通过你的描述发现不太清楚具体的流程,但是可以知道你是多次查询表数据,发现表中数据很多时查询非常慢;
解决方案:
1、进行分表,通过 一致性hash算法 + 分片字段 对查询SQL语句路由到分表后的某张表中,此时分表中的数据是未分表前的其中一部分,数据量偏小,查询会快很多
2、如果现有项目没有使用分表的话,那么从头添加分表会麻烦很多;所以如果你的数据库是MySql的话,可以手动开启查询缓存,然后增大innodb缓冲池大小及缓冲池中的查询缓存空间大小,通过查询缓存功能可以相对提升查询速度,但是这只是权宜之计;
注意:mysql8.0已经废弃了查询缓存功能
我更新了问题,讲了一下业务,应该不是分表能解决的,得做缓存
考虑用异步线程去存储。