ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql-在查询结束之前开始查看查询结果

2019-10-12 07:16:34  阅读:243  来源: 互联网

标签:informix sql mysql oracle database


可以说我查询有500K行的表.我想开始查看保存结果集的提取缓冲区中的任何行,即使查询尚未完成.我想滚动通过提取缓冲区.如果我向前滚动得太远,我想显示一条消息,例如:“在缓冲区缓冲区中最后排了一行.查询尚未完成”.

>在查询继续建立结果集的同时,可以使用fgets()读取读取缓冲区来完成此操作吗?这样做意味着多线程*

是否可以在Oracle,Informix,MySQL或其他RDBMS中提供FIRST ROWS提示指令以外的类似功能?

整个想法是能够在较长的查询完成之前开始查看行,同时显示可立即查看的行数计数器.

编辑:我的建议可能需要对数据库服务器的体系结构进行根本性的更改,例如它们处理内部获取缓冲区的方式.锁定结果集,直到查询完成,等等.我建议的功能非常有用,特别是对于需要很长时间才能完成的查询.为什么要等到整个查询完成后才能开始查看一些结果,而查询继续收集更多结果呢!

解决方法:

有三个基本限制因素:

>查询的执行计划.如果执行计划的末尾有阻塞操作(例如排序或紧急假脱机),则引擎无法在查询执行的早期返回行.它必须等到所有行都被完全处理后,才会将数据尽快返回给客户端.这个时间本身可能是可观的,所以这部分内容可能适用于您所谈论的内容.但是,总的来说,您不能保证查询很快就会有很多可用.
>数据库连接库.从数据库返回记录集时,驱动程序可以使用服务器端分页或客户端分页.使用哪个可以并且确实会影响哪些行以及何时返回.客户端分页强制一次返回整个查询,从而减少了在全部显示之前显示任何数据的机会.谨慎使用正确的分页方法对于在查询生命周期中尽早显示数据的任何机会至关重要.
>客户端程序使用同步或异步方法.如果仅复制并粘贴一些用于执行查询的Web示例代码,则在查询仍在运行时,您将不太可能处理早期结果-而是该方法将阻塞,并且直到全部解决后,您一无所获当然,服务器端分页(请参阅第2点)可以缓解这种情况,但是在任何情况下,如果您不专门使用异步方法,您的应用程序将至少在短时间内被阻塞.对于使用.Net的任何阅读本文档的人,您可能需要查看Asynchronous Operations in .Net Framework.

如果您所有这些都正确,并使用FAST FIRSTROW技术,则可以完成一些您要寻找的东西.但是并不能保证.

标签:informix,sql,mysql,oracle,database
来源: https://codeday.me/bug/20191012/1898453.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有