Oracle11g oracle执行完整表扫描,但返回Resultl的速度太快

Oracle11g oracle执行完整表扫描,但返回Resultl的速度太快,oracle11g,toad,full-table-scan,Oracle11g,Toad,Full Table Scan,当我打开TOAD并从表中选择*时,结果(前500行)几乎立即返回。但是解释计划显示了完整的表格扫描,表格非常大。 结果为什么这么快?Toad只返回前500行的性能,但如果通过Oracle接口(例如JDBC)运行该查询,它将返回整个结果。我最好的猜测是解释计划在没有得到记录子集的情况下向您显示结果;我就是这么用的。除了我自己的经验之外,我没有其他的信息来源。Toad只返回前500行的性能,但是如果您通过Oracle接口(例如JDBC)运行该查询,它将返回整个结果。我最好的猜测是解释计划在没有得到记

当我打开TOAD并从表中选择*时,结果(前500行)几乎立即返回。但是解释计划显示了完整的表格扫描,表格非常大。
结果为什么这么快?

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

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

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

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

谢谢。但我的问题是,即使它只返回500行,结果如何如此迅速?它会不会提取整个记录集,然后从中获取500行?很好的区分,很抱歉我误解了。上面的答案解释了。谢谢。但我的问题是,即使它只返回500行,结果如何如此快速?它不会获取整个记录集,然后从中获取500行吗?很好的区分,很抱歉我误解了。上面的答案解释了。谢谢。但我看到如果我创建一个通过在表上执行select*来查看,然后执行:select*from view则需要更长的时间。这是为什么?@Kaushik-应该没有什么区别。您是否看到了不同的查询计划,该视图涉及哪些内容?是否有谓词(a
WHERE
子句)在任何一个查询上?对不起,我错了。视图有一些复杂的谓词,这就是问题所在。谢谢。但我发现,如果我通过在表上执行select*创建一个视图,然后执行:select*from view,则需要更长的时间。这是为什么?@Kaushik-应该没有区别。您看到了不同的查询计划吗?视图是什么是否涉及?两个查询中是否都有谓词(一个
WHERE
子句)?很抱歉,我错了。视图中有一些复杂的谓词,这就是问题所在。