【发布时间】:2021-04-26 23:06:21
【问题描述】:
一个问题是影响对我们数据库进行的所有查询,其中通过调用存储过程运行查询需要更长的时间。
这似乎通常是一个参数嗅探问题,但对于我一直用来测试完全不使用参数的性能的虚拟查询,我仍然看到这个问题。比如执行
UPDATE TestTable
SET field = 'test'
WHERE id = 1;
从一个准备好的语句 10000 次需要 0.6 秒,同时调用
PROCEDURE plsqlTest(...)
AS
BEGIN
UPDATE TestTable
SET field = 'test'
WHERE id = 1;
END plsqlTest;
同样的数量需要 20 秒以上。是否还有其他可能导致如此巨大差异的原因?
【问题讨论】:
-
我怀疑开销是调用存储过程 10,000 次。此外,时间可能取决于两个时间比较之间的事务处理方式。
-
基本查询仍在从准备好的语句运行,所以开销会有很大差异吗?如果有什么我希望存储过程表现更好(我会澄清原来的问题)
标签: java sql oracle query-optimization