0

我继承了一个……嗯,我想我可以称它为一个#### Struts 应用程序,我的任务是优化一个检查我们的质量控制标准是否符合标准的 Levey-Jennings 流程。

该过程本身运行良好,但即使数据集很小,性能时间也总是会出现巨大的峰值。我测试了算法每个部分之间的时间,发现最耗时的是 Java 的 executeQuery() 方法。

最近我运行了应用程序并将执行时间记录为 10 秒。executeQuery() 自己花费了其中的六秒。好奇地想知道问题出在哪里,我将查询带入 TOAD 并逐字逐句运行它——运行只需要 1 秒钟。

我运行了一个更大的数据集,在 Levey-Jennings 应用程序中运行需要 60 秒 - 但是在 TOAD 中,需要 10 秒。

这是查询的问题,还是使用 executeQuery() 通常是极度减速的前兆?

4

1 回答 1

5

当您在 TOAD(或任何其他 IDE)中运行查询时,此工具希望尽快为您提供您可以看到的结果。通常,它们会向您显示一个包含 10 或 40 行的网格。为了尽可能快地向您显示前 10-40 行,它们提示查询或更改优化环境以尽可能快地生成这些前行。

在这里您可以看到有关 FIRST_ROWS 提示的更多信息:http: //download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements006.htm#SQLRF50302

您的应用程序中的查询可能不使用 FIRST_ROWS 提示。它希望所有行尽可能快。它不关心第一行是否立即出现。因此,这两个查询的优化环境是不同的。

TOAD 显示生成第一行所花费的时间也无济于事,因为它会让您认为这是获取所有行所花费的时间。不过,有一个选项可以导航到最后一行。按下它,你会发现它现在需要更长的时间。

希望这可以帮助。

问候,
罗布。

于 2011-04-21T15:08:24.260 回答