社区
Java SE
帖子详情
JDBC更新一个大表的速度怎么那么慢?
badhorse
2006-12-21 09:11:01
我用的是Sql server数据库,表大约有150万条纪录
在Java程序中使用Sql语句更新表中的一条纪录,要花超过30秒的时间。但使用查询分析器执行该语句,在1秒内即可执行完毕。
请大家指教!
...全文
393
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
连接...
mysql
jdbc
查询
慢
spring_为什么Spring的
jdbc
Template.batchUpdate()这么
慢
?
8 个答案:答案 0 :(得分:12)
JDBC
连接URL中的这些参数可以对批量语句的
速度
产生很大影响 - 根据我的经验,它们可以加快
速度
:useServerPrepStmts =假安培; rewriteBatchedStatements =真答案 1 :(得分:10)我也遇到...
Java SE
62,630
社区成员
307,264
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章