社区
Java SE
帖子详情
JDBC更新一个大表的速度怎么那么慢?
badhorse
2006-12-21 09:11:01
我用的是Sql server数据库,表大约有150万条纪录
在Java程序中使用Sql语句更新表中的一条纪录,要花超过30秒的时间。但使用查询分析器执行该语句,在1秒内即可执行完毕。
请大家指教!
...全文
390
30
打赏
收藏
JDBC更新一个大表的速度怎么那么慢?
我用的是Sql server数据库,表大约有150万条纪录 在Java程序中使用Sql语句更新表中的一条纪录,要花超过30秒的时间。但使用查询分析器执行该语句,在1秒内即可执行完毕。 请大家指教!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
30 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lixiaoxue85
2006-12-21
打赏
举报
回复
速度永远不是瓶颈
mathsfan
2006-12-21
打赏
举报
回复
这个年代效率最重要,语句写的再好,执行不快还是白搭```
badhorse
2006-12-21
打赏
举报
回复
看来只能先使用普通Statement语句组装Sql了, 原语句有90多个参数, 会是一条非常丑陋的语句。唉...
badhorse
2006-12-21
打赏
举报
回复
我试了微软的jdbc驱动和JDTS, 结果一样。
badhorse
2006-12-21
打赏
举报
回复
我查了些资料, 好像是数据库处理prepareStatement使用的执行计划于普通Statement的执行计划不同。
dreamover
2006-12-21
打赏
举报
回复
可能是sqlserver的jdbc驱动里对prepareStatement的处理方式的问题
badhorse
2006-12-21
打赏
举报
回复
呵呵, 我随便用的一个号码, 不知道是不是有效号码。
marckle
2006-12-21
打赏
举报
回复
调试一下,看看到底具体那一段执行时间长,然后想办法优化这一段。标准的SQL都很快的,用了上层的一些函数就会数量级的慢。
fool_leave
2006-12-21
打赏
举报
回复
把私人信息隐藏一下吧
badhorse
2006-12-21
打赏
举报
回复
什么意思呀
lcllcl987
2006-12-21
打赏
举报
回复
"where user_mobile = '8613910866967' and USSDPortal = '138*11' " +
//'8613910866967' 但愿是假号码
badhorse
2006-12-21
打赏
举报
回复
不用ReqDBReq我试了一下, 还是同样慢。
shine333
2006-12-21
打赏
举报
回复
Req2DBReq会有问题吗?
你干吗不试试sql=".... where user_mobile = ? and USSDPortal = ? .... "
pstmt.setString(1, "86....."); //但愿那个测试的是假号码
badhorse
2006-12-21
打赏
举报
回复
我把代码写成下面这样, 速度就很快了, 难道使用参数复制的方式组装Sql语句会有性能问题?
private void updateStatTable(Req2DBReq req)
{
String sql = "update t_stat_hour_user set FNum = FNum + 1 " +
"where user_mobile = '8613910866967' and USSDPortal = '138*11' " +
"and time_begin = cast('2006-12-21 09:00:00' as datetime)";
Connection conn = null;
PreparedStatement pstmt = null;
try
{
Date now = new Date();
conn = DBConnectionPool.getInstance().getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
}
catch (SQLException e)
{
DsmpProxyApp.getLog().error(
"数据库操作错误(Req2DBHandler):" + e.getMessage());
}
finally
{
DBTools.close(conn, pstmt, null);
conn = null;
pstmt = null;
}
}
badhorse
2006-12-21
打赏
举报
回复
我在查询分析器中执行以下语句, 一瞬间即可完成:
update t_stat_hour_user set FNum = FNum + 1
where user_mobile = '8613910866967' and USSDPortal = '138*11' and time_begin = cast('2006-12-21 09:00:00' as datetime)
badhorse
2006-12-21
打赏
举报
回复
我把原来的函数精简了, 结果一样, 下面是完整的函数:
private void updateStatTable(Req2DBReq req)
{
String sql = "update t_stat_hour_user set FNum = FNum + 1 where user_mobile = ? and USSDPortal = ? and time_begin = ? ";
Connection conn = null;
PreparedStatement pstmt = null;
try
{
Date now = new Date();
conn = DBConnectionPool.getInstance().getConnection();
pstmt = conn.prepareStatement(sql);
GregorianCalendar timeBegin = null;
timeBegin = new GregorianCalendar();
timeBegin.setTime(now);
timeBegin.set(GregorianCalendar.MINUTE, 0);
timeBegin.set(GregorianCalendar.SECOND, 0);
timeBegin.set(GregorianCalendar.MILLISECOND, 0);
pstmt.setString(1, req.getMobile());
pstmt.setString(2, req.getUSSDPortal());
pstmt
.setTimestamp(3, new Timestamp(timeBegin.getTime().getTime()));
pstmt.executeUpdate();
}
catch (SQLException e)
{
DsmpProxyApp.getLog().error(
"数据库操作错误(Req2DBHandler):" + e.getMessage());
}
finally
{
DBTools.close(conn, pstmt, null);
conn = null;
pstmt = null;
}
}
fool_leave
2006-12-21
打赏
举报
回复
你这个sql在修改参数后和你在查询分析器里面的完全一样吗?
主要是where语句,一定一样吗?
newste
2006-12-21
打赏
举报
回复
不过我觉得可能是你的代码有问题,你单独写个方法测试下看看,是不是也需要30秒;
newste
2006-12-21
打赏
举报
回复
关注下
hbwhwang
2006-12-21
打赏
举报
回复
不会吧?
加载更多回复(10)
jdbc
sqlserver update语句 执行
速度
慢
在java中执行update语句,
更新
一个
有150万条记录的表,
速度
特别
慢
,约2条sql语句/s。 分析 影响通过
jdbc
执行update语句的因素主要有如下几种: 网络IO(对应解决方案1) 执行update语句(对应解决方案2)
速度
过
慢
...
线上bug! Sharing-
JDBC
第一次查询为什么这么
慢
?
Sharing-
JDBC
第一次查询为什么这么
慢
?一、缘起二、追踪过程1、问题复现2、问题追踪1)github Issues 寻找线索2)分析对比三、结论 一、缘起 内部框架发布了新版本,有开发反馈sharding查询
慢
。通过一系列对比分析...
Oracle 的
JDBC
写入有多
慢
?
在《Oracle 和 MySQL 的
JDBC
到底有多
慢
》中我们测试过 Oracle的
JDBC
读出性能,现在再来测试一下写入情况。 1. 数据来源 使用TPCH生成的数据,选用其中的part表来做测试,数据记录为2000万行,9个字段。它生成...
linux mysql
jdbc
慢
_Oracle数据库之Linux(Centos)下
jdbc
连接oracle
速度
超
慢
的问题
本文主要向大家介绍了Oracle数据库之Linux(Centos)下
jdbc
连接oracle
速度
超
慢
的问题,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。最近在centos下写个javaswing程序,发现在linux用
jdbc
连接...
java批处理越跑越
慢
_批量处理
JDBC
语句提高处理
速度
作为
一个
替代方案,可以试试使用Statement 的批量处理特性看看能否同时执行所有的SQL以提高
速度
。存储过程的最简单的形式就是包含一系列SQL语句的过程,将这些语句放在一起便于在同
一个
地方管理也可以提高
速度
。...
Java SE
62,635
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章