JDBC执行存储过程异常慢

JDBC执行存储过程异常慢,第1张

1.connection不知道你是采用什么方式获取的,如果不是从连接池里取,你每connection.close()一次,下次get的时候会重新建立实际物理链接,这样会相当耗时。所以你检查一下是在获取connection时耗的时间多,还是在execute的时间多。代码:

long startTime = System.currentTimeMillis()

conn = getConnection()// execute()

long endTime = System.currentTimeMillis()

System.out.println("获取链接的时间:" + (endTime - startTime))

执行的类似;

2.从你的存储过程的逻辑来说,要条件查询,更新某个字段的值,和入库,这三个漏升步骤应该有输入参数的,那么你的这个参数是怎么传入的?

个人觉得你的这个存储过程可以优化成SQL来执行,效率应该会更好:

首先,你把输入参数放入一个临时表;

比如结构是:

_id _field

查询的条件 更新的字段

// 更新_table中存在的记录的_field字段,并且只更新_table与_tmp键值相等的记录

UPDATE _table t SET _field=(SELECT MAX(_field) FROM _tmp WHERE _id=t._id) WHERE EXISTS (SELECT 'X' FROM _tmp WHERE _id=t._id)

// 选择_table与_tmp键值不相等的记录(即_table中不存在的记录)插入_table

INSERT INTO _table (_id,_field) (SELECT _id,_field FROM _tmp t WHERE NOT EXISTS (SELECT 'X' FROM _table WHERE _id=t._id))

这样的话,高巧每次都是两个批量 *** 作,而且不需要输入参数,直接调用就可以戚搜键,唯一需要多做的工作就是做临时表。

1、存储过程是已经编译过的,在执行时效率高

2、在程序中的SQL语句,每次都要经过蔽猛数据库服务器的编译、校验、索引选择、缓存选择等等步骤。相对存储过程是慢的

3、当然也有些事情是必须要在程序中处理,例如:字符串的处理,各种情况的判断等,这个不能一概而论,需要冲并散具体场景具体分析,然散氏后选择最优的方法来试用。

某些情况下, 有一定的作用. 不是带悉尘 100% 的陆洞。

例如你要执行一套很复杂的 *** 作, 要执行很多个 SQL 语句。

执行一个后, 要看执行结果, 在做判断,执行下一个这样的。

要在网络之间,来回传递 SQL 语句, 与执行结果这种情况。

如果用存储过程,那么会提升一些效率。

网络之间, 只需要传递一次请蠢禅求, 以及获取一次执行结果就可以了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12542546.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存