0

正如标题所暗示的,我有一个非常简单的 Oracle 查询,当我返回 251 个结果时,它会在 5 秒内返回。我正在使用 SQL Developer,并使用内置的连接实用程序进行附加(此应用程序中没有 ODBC 连接工具)。

在这里找到的查询很快(足够快)(pa_stu 大约有 40k 行):

Select * From pa_stu Where rownum < 252;

根据 SQL Developer,Oracle 在 0.521 秒内将数据返回给我。

以下查询以及提取更大数据集的查询是罪魁祸首:

Select * From pa_stu Where rownum < 253;

根据 SQL Developer 的说法,Oracle 在 5.327 秒内将最后一个数据返回给我。

用于测试的所有查询都具有相同的解释计划。也就是说,ROWNUM<251 的过滤谓词(将 251 更改为正在使用的任何数字)和 FULL 的 TABLE ACCESS。

上面的结果是一致的,另外,将评估的数字提高到大约 1000 会使结果时间翻倍到大约 10 秒(一致)。就好像某处正在进行一些缓冲,而那个缓冲区太小了。此外,这仅发生在我们的一台 Oracle 服务器上。另一个更常用的(也包含不同的数据)使用类似的语句返回数千条记录没有问题。

数据库由 DBA 控制,而且,我已经由她运行所有这些。她没有解决办法。这实际上是在一个月左右开始发生的,而几个月前并非如此,如果这有意义的话。只是没有现在那么明显。

感谢您的任何帮助。

4

0 回答 0