当我打开TOAD并执行select * from table
时,结果(前500行)几乎立即回来。但解释计划显示全表扫描,表格非常庞大。
结果怎么这么快?
答案 0 :(得分:4)
通常,Oracle在开始返回数据之前不需要实现整个结果集(当然,Oracle必须具体化结果集才能在开始返回数据之前对其进行排序) 。假设您的查询不需要实现整个结果集,Oracle将开始将数据返回给客户端进程,无论该客户端进程是TOAD还是SQL * Plus还是您编写的JDBC应用程序。当客户端请求更多数据时,Oracle将继续执行查询并返回下一页结果。这允许TOAD相对快速地返回前500行,即使Oracle最终需要花费很多时间来执行整个查询并将最后一行返回给客户端。
答案 1 :(得分:0)
Toad仅返回前500行以提高性能,但如果您通过Oracle接口(例如JDBC)运行该查询,则会返回整个结果。我最好的猜测是,解释计划会在没有获得记录子集的情况下向您显示结果;这就是我如何使用它。除了我自己的经验之外,我没有其他的来源。