【发布时间】:2010-06-20 01:52:08
【问题描述】:
例如:当查询尚未完成对表的搜索时,是否能够在查询返回时开始显示或操作行?我并不是说使用FIRST ROWS 指令来提示引擎,我的意思是透明的,无需添加额外的逻辑。这样的功能对于需要很长时间才能完成的查询很有用。
【问题讨论】:
-
我认为没有任何理由认为 SQL 还不是多线程的。
标签: sql mysql database oracle informix
例如:当查询尚未完成对表的搜索时,是否能够在查询返回时开始显示或操作行?我并不是说使用FIRST ROWS 指令来提示引擎,我的意思是透明的,无需添加额外的逻辑。这样的功能对于需要很长时间才能完成的查询很有用。
【问题讨论】:
标签: sql mysql database oracle informix
如果您考虑一下,这仅适用于没有 ORDER BY 或 GROUP BY 指令的查询。您所要求的似乎类似于“转储”的工作方式,它在完成读取表之前开始写入文件。您可以在完成转储之前开始读取文件并处理数据。
一些数据库支持缓冲和非缓冲查询处理,这部分是您正在寻找的。p>
【讨论】:
SQL 是一种关系代数,旨在对集合(而不是子集)进行操作,在我看来,如果修改为允许这样做,将不会获得任何收益。
如果您需要此功能,很容易对数据库进行两次往返,第一次使用 fetch first 100 rows only 并快速显示它,第二次没有,以检索整个集合。
没有什么可以阻止实现(例如 DB2)快速返回第一行 N 行,同时它仍在向下传输其余行。
【讨论】:
ORDERED BY 的存在。
order by X 的查询的列 X 上的索引),这可能是可行的。但在野外很少有未排序的查询。
您知道像 Oracle 这样的大型数据库还没有这样做吗?你做了一些从 blah 中选择 * 的代码并开始将结果流式传输到你的客户端,你知道 Oracle 在开始发送第一个字节之前已经 100% 计算并加载到内存中的查询吗?
(我也不知道,但如果这是真的,至少在某些情况下,我不会感到惊讶)
【讨论】: