作为数据分析项目的一部分,我将在mysql数据库上发布一些长时间运行的查询。我未来的行动方针取决于我在此过程中获得的结果。能够查看仍在运行的SELECT语句生成的部分结果对我很有用。
有办法做到这一点吗?或者我是否一直等到查询完成后才能查看在运行的最初几秒内生成的结果?
感谢您的帮助:)
答案 0 :(得分:1)
一般情况下,无法生成部分结果。例如,如果您具有GROUP BY子句的聚合函数,则应在返回第1行之前分析所有数据。 LIMIT子句对您没有帮助,因为它是在计算输出后应用的。也许你可以提供具体的数据和SQL查询?
答案 1 :(得分:1)
您可以考虑的一件事是抽样表。这通常是数据分析中的一种很好的做法,可以在编写代码时加快迭代速度。
例如,如果您有表创建privelages并且您有一些巨大的表X,其中包含键unique_id和一些数据data_value
如果unique_id是数字,几乎在任何数据库中
create table sample_table as
select unique_id, data_value
from X
where mod(unique_id, <some_large_prime_number_like_1013>) = 1
将为您提供随机的数据样本以处理您的查询,您可以将sample_table与其他表内联接,以提高测试/查询结果的速度。由于采样,您的查询结果应该大致代表您将得到的结果。请注意,您要修改的数字必须为素数,否则将无法提供正确的样本。上面的示例会将您的表缩小到原始大小的0.1%(确切地说是.0987%)。
大多数数据库也有比使用mod更好的采样和随机数方法。检查文档以查看适用于您的版本的内容。
希望有所帮助, McPeterson
答案 2 :(得分:1)
这取决于您的查询正在做什么。如果它需要在生成输出之前拥有整个结果集 - 例如对于具有group by或order by或having子句的查询可能会发生,那么就没有什么可做的了。
但是,如果延迟的原因是客户端缓冲(这是默认模式),则可以使用“mysql-use-result”作为数据库处理程序的属性而不是默认值来调整MySQL的店,结果”。对于Perl和Java接口也是如此:我认为在C接口中,您必须使用执行查询的函数的无缓冲版本。