我们有一个包含 1700 万行的表,其中包含产品属性,假设它们是:
品牌ID、尺码ID、颜色ID、价格、形状ID
我们需要按品牌和尺寸查询聚合。目前,我们通过执行以下操作来查询和过滤此数据:
select brandID, sizeID, count(*)
from table where colorID in (1,2,3) and price=10 and shapeID=17
--"additional complex where clause here"
group by brandID, sizeID
order by brandID, sizeID
我们报告了这些数据。问题是,尽管返回的实际数据只有几百行,但运行此查询需要 10 秒左右(这是一个非常简单的示例)。
我认为我们已经达到了对该表建立索引的能力,因此我认为任何数量的索引都无法让我们获得近乎即时的结果。
我对 OLAP 或其他分析服务知之甚少,但是 SQL Server 有什么可以预过滤或预聚合此表以便可以执行上述查询(或类似的返回等效数据)的查询? 或者处理非常大的表上的任意 where 子句的最佳方法是什么?
最佳答案
我认为这是 Olap 立方体的完美候选者。我有数百行的事实数据。我正在执行您上面描述的那种查询,查询会在几分钟内返回。我将其移至 OLAP 多维数据集中,查询现在几乎是即时的。 olap 有一点学习曲线。我强烈建议您找到一个有关一些简单的立方体构建的教程,以便您了解它。 DBA 同事多年来一直在告诉我有关多维数据集的信息,但我一直没有完全理解。现在我不知道为什么我这么长时间没有它。
除了 OLAP 之外,您可能还想研究索引 View ,但如果您以多种方式对数据进行切片,这可能不可行。
关于SQL Server 聚合非常大的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511553/