SQL Server 聚合非常大的表

标签 sql sql-server tsql olap

我们有一个包含 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/

相关文章:

sql-server - Microsoft SQL Server Management Studio SSMS 2012 中缺少 SQL Azure 数据库的数据库图表节点?

SQL Management Studio 'View Dependencies' 未列出所有依赖项

tsql - 用等级更新结果集

sql - 一次查询中总和的平均值

php - 显示具有相同列值的不同行的多个值

sql-server - 函数计算已在真/假表达式中使用,该表达式用作不允许的表过滤器表达式

php - MYSQL 将行转换为列

c# - 无法将 System.IO.Compression 添加到 SQL Server 中的受信任程序集

mysql - 涉及多个表的一对一关系

sql - 在 Go 中为 PGSQL 函数提供参数