SQL的内置多线程功能是否可取?

时间:2010-06-20 01:52:09

标签: sql mysql database oracle informix

例如:当查询尚未完成搜索表时,是否能够开始显示或操作查询返回的行?...我并不是指使用FIRST ROWS指令来提示引擎,我的意思是透明,无需添加附加逻辑。像这样的功能对于需要很长时间才能完成的查询非常有用。

3 个答案:

答案 0 :(得分:2)

SQL是一个关系代数,意味着对集合(不是子集)进行操作,并且在我看来,如果修改它就不会获得任何东西。

如果你想要这个功能,可以很容易地两次往返数据库,第一次用fetch first 100 rows only并快速显示,第二次没有,以检索整个数据集。

没有什么能阻止实现(例如DB2)快速返回第一个N行,同时仍然传输其余的行。

答案 1 :(得分:2)

如果您考虑一下,那只适用于没有ORDER BY或GROUP BY指令的查询。看起来你要问的是“转储”的工作方式,它在读完表之前开始写入文件。在完成转储之前,您可以开始读取文件并处理数据。

某些数据库支持缓冲和非缓冲查询处理,这部分是您正在寻找的。

答案 2 :(得分:0)

您是否知道像Oracle这样的大型数据库还没有这样做?你做了一些select * from blah的代码,并开始将结果流式传输到你的客户端,你知道甲骨文在开始发送第一个字节之前将查询100%计算并加载到内存中吗?

(我也不知道,但如果这是真的,我不会感到惊讶,至少在某些情况下是这样)