0

当我打开 TOAD 并执行select * from table时,结果(前 500 行)几乎立即返回。但是解释计划显示全表扫描并且表非常巨大。结果怎么这么快?

4

2 回答 2

4

一般来说,Oracle 不需要在开始返回数据之前实现整个结果集(当然,在某些情况下,Oracle 必须在开始返回数据之前对结果集进行具体化以便对其进行排序)。假设您的查询不需要实现整个结果集,Oracle 将开始将数据返回到客户端进程,无论该客户端进程是 TOAD 还是 SQL*Plus 还是您编写的 JDBC 应用程序。当客户端请求更多数据时,Oracle 将继续执行查询并返回下一页结果。这允许 TOAD 相对较快地返回前 500 行,即使 Oracle 最终需要花费数小时来执行整个查询并将最后一行返回给客户端。

于 2012-10-15T14:35:06.110 回答
0

Toad 仅返回前 500 行以提高性能,但如果您通过 Oracle 接口(例如 JDBC)运行该查询,它将返回整个结果。我最好的猜测是,解释计划会在没有获得记录子集的情况下向您显示结果;这就是我使用它的方式。除了我自己的经验之外,我没有其他来源。

于 2012-10-15T14:23:03.460 回答