现在有个接口,直接测试是6s左右,逻辑程序都在几个毫秒之间,查询用了5s+.但是控制台打印了查询语句,用Navicat直接查该语句又在0.2s的样子,数据库是远程,就不知道哪个地方能优化orz,麻烦解答下
个人觉得:
1.您的数据库连接数据远程,有一定可能与网络波动有关;
2.查询到的数据,经过mybatis的映射,在序列化和反序列化之间也会存在一定的时间消耗(亲测);
3.Navicat工具在查询之后,未对数据进行封装处理,速度自然比mybatis处理的快。
不用考虑的问题:
1.一般这种情况和sql查询没关系,但是sql在查询的时候和数据库之间也是会有毫秒级别的差异;数据量或者关联数据大的情况下,可能达到500ms的差异或者更大。
应该是把结果集封装成Java对象耗时太多
远程数据库的话 可能跟网络带宽有关 直接查询0.2s说明sql语句应该问题不大 可以用局域网数据库试试
本地开发的时候也用的是这个远程的数据库,所以配置的是远程服务器的ip,现在项目上线了,项目和数据库都在一个服务器上,是不是数据库的配置没改改成localhost?
可能有资源没有被释放
查一下慢sql日志看看是哪里速度慢了
你把查询的没一句话下面都输出一个当前时间,看看是哪一段代码耗时很长,然后研究那个代码 ,其实那里要么是查询语句问题,要么是封装返回值问题。
先写个JDBC测试下时间,确定一下是sql转换为对象的问题还是mybatis的问题,如果也是5秒以上,则表示你的sql转换的问题,看看是不是转换的对象过多,如果时间还是0.2秒左右,则表示你的mybatis读取可能有一一定的问题,根据实际情况修改下,或是这里不用mybatis。
主要两方面,第一要排除网络问题,第二就是查询语句有问题(尽量减少in等函数),我公司也是两台远程服务器,服务和数据库都是分开的