mysql-在查询结束之前开始查看查询结果
作者:互联网
可以说我查询有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