我有一个多维数据集,其中有一个关于在线客户订单的事实表。每行包含basketID
和customerID
。然后,可以存在多个相同basketID
/ customerID
的行以及该项目中的项目的另一个ID。
我的数据集中不同basketID
的数量接近3200万。因此,作为一个物理上的独特计数,性能非常缓慢,特别是当我引入维度层次结构时。
我想知道是否有人有任何关于在哪里寻求提升性能的提示。我一直在运行基于使用情况的聚合优化,这有点一点一点地帮助,但没有什么大的影响。我不认为我可以做很多很多,因为虽然客户可以有多个篮子,但是一个篮子不能有多个顾客(如果错误,请纠正我)。物理RAM在服务器上的容量为128GB。篮子ID的独立计数大约是一分钟,一些更复杂的钻取查询可能需要2.5到5分钟。
我已经筋疲力尽了谷歌并且开始怀疑我是否只是因为数据量而需要处理缓慢计数,但是想知道其他人是否有任何途径?
答案 0 :(得分:1)
我建议阅读这些白皮书和帖子。您可以查看它描述的优化,例如具有非重叠的basketID范围的分区。
这篇旧文章描述了SSD针对不同计数的性能提升: https://web.archive.org/web/20101129205756/http://sqlcat.com/technicalnotes/archive/2010/09/20/analysis-services-distinct-count-optimization-using-solid-state-devices.aspx
基于3200万个不同的basketID,我将删除您构建的所有聚合。用于不同计数措施的Aggs是不同的。对于具有5年数据的数据集的Sum测量,年度agg仅为5行。但是对于一个独特的计数测量,年度每年每个聚类将存储一行每个不同的计数值。所以它不会比原始事实表小得多。
如果basketID不是bigint,我会找到一些方法来使它变得更大,因为这将有助于提高性能。
答案 1 :(得分:0)
我知道这篇文章来自3年前,但是在研究同一问题时,我遇到了Marco Russo的this article,涉及SUMX和DISTINCT的结合。将这种逻辑应用于我的多维数据集后,查询时间有了明显的改善,从可能超时的查询到几秒钟内完成的查询,都返回了相同的结果。