准备好的陈述是否明显减慢了程序?

时间:2010-08-28 07:57:13

标签: java jdbc prepared-statement

我正在编写一个软件,要求我准备语句并设置值,执行查询并在循环中获取结果。此循环可能有超过7,000个循环。如果我使用简单语句而不是预处理语句,执行速度会发生很大变化吗?

这是伪代码

  1. 准备陈述
  2. 从某个地方获取一份清单
  3. 遍历列表
  4. 获取准备好的语句并执行一些db查询并关闭结果集等新资源。
  5. 使用初始列表中的结果和值填充地图
  6. 感谢。

4 个答案:

答案 0 :(得分:8)

如果您重复使用具有多组数据的相同语句,则准备好的语句比非预备语句更快。我不知道这种情况并非如此。

准备好一个语句后,它会被发送到数据库服务器,然后每次调用它时只需要接受数据 - 每次绑定新数据时都不需要重新处理语句。

所以简单的答案是:

没有。他们没有。

答案 1 :(得分:4)

准备好的陈述对于重复性任务来说更快。

http://download.oracle.com/javase/tutorial/jdbc/basics/prepared.html

  

如果要多次执行Statement对象,通常会缩短执行时间以使用PreparedStatement对象。

答案 2 :(得分:4)

只是出现了一些问题:确保不在循环中创建预处理语句。涉及一些开销,但在第三次查询之后回收自己。实际上,对于大型参数列表,单个查询甚至可能更快。

在某些(或几个大型)交易中运行所有查询的事情会大大加快速度。如果它是大型数据集,则每个事务可能需要1000次查询或类似的事情。 (当然,您的域模型的语义必须允许这样,但根据我的经验,几乎总是如此)。

您可以在单个事务中聚集的查询数量在某种程度上依赖于数据库,因此可能需要进行一些实验和阅读。

答案 3 :(得分:1)

您可能还会考虑为每个语句检索多个值:

SELECT id, value FROM table WHERE id IN (?, ?, ?, ?, ?, ?)

这比单个查询更快。