【发布时间】:2014-10-12 15:41:39
【问题描述】:
我正在编写一个 C# 应用程序,它应该运行 Oracle-Select 查询并为每一行执行一些计算。
select查询很大,耗时很长。
在当前的应用程序设计中,我应该等到查询完成从数据库中检索所有数据,以便开始对每一行进行所需的计算。
我想知道是否有办法在数据库引擎找到它们时获取第一个查询结果。
意思是:不是等待数据库引擎找到我的查询对应的所有行并返回,而是从数据库引擎找到第一行开始得到结果。
最后,每行所需的计算将与在数据库中找到的第一行一样开始,因此总运行时间会更少。
这里的想法不是关于如何加快 Oracle 查询或添加任何索引。更多的是通过重叠计算来优化更多的计算。
抱歉,如果这是一个转储问题,请提前感谢您。
我使用的是 Oracle 11g,查询可能很简单(但返回数十万行)
Select * from Table Where Condition1;
我为我的查询运行解释计划:
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 251 | 122K| 656K (1)| 00:07:40 |
|* 1 | TABLE ACCESS FULL| TABLE1 | 251 | 122K| 656K (1)| 00:07:40 |
-----------------------------------------------------------------------------
【问题讨论】:
-
大部分......嗯......几乎总是,缓慢发生在获取行的后台进程中。(磁盘I / O,排序......等)所以,当结果可用时,无论如何数据库快回到你身边。您可能需要写一些pipe-lined functions 来满足您的需求!还有你可能感兴趣的FIRST_ROWS提示!
-
你能详细说明你的想法吗?感谢您的耐心等待。
-
您在应用程序中进行什么样的计算?这些可以在查询中完成吗?
-
请在您的问题中添加以下内容:SQL 语句和 Oracle 数据库版本号。请说明您是否使用适用于 .NET 的 Oracle 数据提供程序。这些信息将有助于提供适当的提示。
-
不幸的是,计算不会在查询中完成。这是一种基于第三方 API 的金融工具定价