聚合查询是否有专门的数据库?

Chr*_*tow 7 sql database mongodb nosql

是否有专门的数据库 - rdbms,nosql,key-value或其他任何数据库 - 这些数据库针对非常大的数据集运行快速聚合查询或映射减少进行了优化:

select date, count(*)
from Sales
where [various combinations of filters]
group by date
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经在MongoDB和SQL Server上运行基准测试,但我想知道是否有更专业的解决方案,最好是可以水平扩展数据的解决方案.

Den*_*rdy 6

根据我的经验,真正的问题与聚合查询性能(我发现在我尝试过的所有主要数据库中都很好)关系不大,而与查询的编写方式有关。

我已经记不清有多少次看到大量的报表查询,其中到处都有大量的连接和内联子查询聚合。

在我的脑海中,让这些事情变得更快的典型步骤是:

  1. 在可用且适用的情况下使用窗口函数(即over ()运算符)。多次重新获取数据绝对没有意义。

  2. 在可用且适用的情况下使用公用表表达式(with查询)(即您知道的集合相当小)。

  3. 将临时表用于大型中间结果,并在使用它们之前为其创建索引(并分析它们)。

  4. 如果可能的话,通过尽早过滤行来处理小型结果集:select id, aggregate from (aggregate on id) where id in (?) group by id可以通过将其重写为select id, aggregate from (aggregate on id where id in (?)) group by id.

  5. 使用union/except/intersect all而不是在union/except/intersect适用的地方。这消除了对结果集无意义的排序。

作为奖励,前三个步骤都倾向于使报告查询更具可读性,从而更易于维护。


900*_*000 1

对于某些类型的数据(大量、时间序列),kx.com 提供了可能最好的解决方案:kdb+。如果它看起来像您的数据类型,请尝试一下。注意:他们不使用 SQL,而是使用更通用、更强大、更疯狂的集合论语言。