Java 准备好的语句是否会显著降低程序的速度?

Java 准备好的语句是否会显著降低程序的速度?,java,jdbc,prepared-statement,Java,Jdbc,Prepared Statement,我正在编写一个软件,它要求我准备语句、设置值、执行查询并在循环中获得结果。这个循环可能有超过7000个循环。如果我使用简单语句而不是准备好的语句,执行速度会有很大的变化吗 这是伪代码 准备陈述 从某处得到一份清单 反复浏览列表 获取准备好的语句,执行一些数据库查询,并关闭新资源(如结果集)。 使用初始列表中的结果和值填充贴图 谢谢。如果对多组数据重复使用同一语句,则准备语句比未准备语句更快。我不知道在什么情况下这不是真的 一旦您准备好一条语句,它将被发送到DB服务器,然后DB服务器只需在每次调用

我正在编写一个软件,它要求我准备语句、设置值、执行查询并在循环中获得结果。这个循环可能有超过7000个循环。如果我使用简单语句而不是准备好的语句,执行速度会有很大的变化吗

这是伪代码

准备陈述 从某处得到一份清单 反复浏览列表 获取准备好的语句,执行一些数据库查询,并关闭新资源(如结果集)。 使用初始列表中的结果和值填充贴图
谢谢。

如果对多组数据重复使用同一语句,则准备语句比未准备语句更快。我不知道在什么情况下这不是真的

一旦您准备好一条语句,它将被发送到DB服务器,然后DB服务器只需在每次调用它时接受数据,而不必在每次绑定新数据时重新处理该语句

因此,简单的答案是:


不。他们不会。准备好的语句对于重复性任务来说速度更快

:

如果要多次执行语句对象,通常使用PreparedStatement对象可以缩短执行时间


只是一些突然出现的事情:确保不要在循环中创建准备好的语句。这涉及到一些开销,但在第三次查询后会自行偿还。实际上,使用大参数列表,对于单个查询来说可能更快

在一个或几个大型事务中运行您的所有查询确实会大大加快速度。如果是大型数据集,则每个事务可能需要1000个查询或类似的查询。当然,域模型的语义必须考虑到这一点,但根据我的经验,几乎总是这样


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

> P>您也可以考虑检索每个语句的多个值:

从表中选择id,其中id位于?、?、?、?、?、?中


这将比单个查询更快

如果重复运行同一个查询,PreparedStatements通常比常规查询更快。性能不错,但PreparedStatements真正的优势在于参数绑定可以通过API完成,而不是字符串连接。这对于日期类型特别有用。还可以防止SQL注入攻击。@amber,在准备好的语句在墙时间内更快之前,可能需要一段时间才能收回准备开销。我相信你的结论是错误的。准备好的语句可能比临时查询运行得慢。原因很简单:数据库引擎可能会生成一个计划,该计划对于@x=1是最佳的,但对于@x=2、3、4等等不是最佳的。但是,一般来说,在紧循环中准备好的语句会给您带来更好的结果。实际上,如果您只执行一次或两次语句,那么准备好的语句的设置时间可能会超过执行过程中的收益:我的意思是在他的情况下。他提出的设想是反复浏览一个列表。我的回答不清楚。为了清晰起见,我编辑了我的原始帖子。这正是我正在做的。我的观点是,你可以在列表中迭代,每次数据库调用大约10个项目。