最小化查询结果大小算法



一些上下文

现在客户端发送一个请求,试图获得所有数据从选定的日期到现在显示在图表上,它的工作很好90%的时间,但有时结果查询的大小可以达到2000万行,这是绝对可预测的工作真的很慢,所以现在我正在研究如何显示数据以某种方式减少结果数据的大小

  1. 什么是最快的方法来计算结果行数来决定我应该使用某种最小化算法吗?我想当谈到这么大的数据时,任何最小化都可能是有帮助的
  2. 什么算法可以足够快地在图表上显示数据?现在我只想到将请求分成N部分,计算每个部分的平均值,并在图表上显示平均值,这将有助于表示日期,但计算百万行的平均值仍然会占用大量时间

感谢您的帮助

您需要获取从所选日期到现在的所有数据。这不允许您最小化结果,这样做会向用户显示false信息(依我之见)比缓慢糟糕得多。也许更好的方法是设置一个阈值,询问用户是否希望继续,并允许他们继续或不继续。现在每次计数太慢了,但有一个替代方法:创建一个Materialized View,每天刷新,其中包含日期和该日期的计数。现在不是直接选择,而是从MV中选择第一个。如果结果超过设定的阈值,请用户确认。这将对所有请求产生减缓效果,但对于相对较少的行,这应该不会太糟糕。然后,这允许您收集行与响应时间的统计信息,并为用户提供结果的估计时间。我发现用户通常不介意等待,如果你能提前告诉他们。看这里的演示:你没有提供表定义,所以我只是编了一些东西。

create materialized view all_data_summary as
select the_date, count(*) num_items
from all_data
group by the_date;  

select sum(num_items) 
from all_data_summary 
where the_date between :user_date and current_date;

最新更新