社区
Java SE
帖子详情
JDBC更新一个大表的速度怎么那么慢?
badhorse
2006-12-21 09:11:01
我用的是Sql server数据库,表大约有150万条纪录
在Java程序中使用Sql语句更新表中的一条纪录,要花超过30秒的时间。但使用查询分析器执行该语句,在1秒内即可执行完毕。
请大家指教!
...全文
367
30
打赏
收藏
JDBC更新一个大表的速度怎么那么慢?
我用的是Sql server数据库,表大约有150万条纪录 在Java程序中使用Sql语句更新表中的一条纪录,要花超过30秒的时间。但使用查询分析器执行该语句,在1秒内即可执行完毕。 请大家指教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
速度
过
慢
主要是update语句中的where子句造成的。 解决方案 1. 采用
jdbc
批量执行,减少java io。 主要用到如下几个方法: addBa...
线上bug! Sharing-
JDBC
第一次查询为什么这么
慢
?
Sharing-
JDBC
第一次查询为什么这么
慢
?一、缘起二、追踪过程1、问题复现2、问题追踪1)github Issues 寻找线索2)分析对比三、结论 一、缘起 内部框架发布了新版本,有开发反馈sharding查询
慢
。通过一系列对比分析之后解决了问题。本文对过程中的一些思考,思路做个总结。 二、追踪过程 1、问题复现 示例大致重现如下: @Test public void testInse...
java批处理越跑越
慢
_批量处理
JDBC
语句提高处理
速度
有时候
JDBC
运行得不够快,这使得有些程序员使用数据库相关的存储过程。作为
一个
替代方案,可以试试使用Statement 的批量处理特性看看能否同时执行所有的SQL以提高
速度
。存储过程的最简单的形式就是包含一系列SQL语句的过程,将这些语句放在一起便于在同
一个
地方管理也可以提高
速度
。Statement 类可以包含一系列SQL语句,因此允许在同
一个
数据库事务执行所有的那些语句而不是执行对数据库的一系列...
JDBC
执行sql
慢
的问题
今天发现
JDBC
的
一个
怪问题。 同样的sql,在mysql客户端中执行只要0.6、7秒,但是在
JDBC
中执行却要十二三分钟!这差距也太大了!而且只是其中一张表如此,查看表结构,很正常,没有索引,连主键都没有,就只有字段,字段类型也没有BLOB、CLOB之类的大数据类型,和其他表相比,字段数量也差不错。那就奇怪了,虽说
JDBC
是要
慢
些,但是不至于差别几百倍吧。再对比sql,唯一不同的就是这个
慢
java
jdbc
批量
更新
_java,
jdbc
,大量数据update
更新
效率很
慢
,哪位大神可怜可怜我吧...
数据库用的是mysql,部署在windows系统上。前提是不改变这两个条件。Stringsql="updatetableA=?,B=?,C=?whereD=?andE=?";字段D和E都建索引了。BatchPreparedStatementSetterbatch=new...数据库用的是mysql,部署在windows系统上。前提是不改变这两个条件。String sql= "update tabl...
Java SE
62,616
社区成员
307,307
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章