我在 Azure SQL 数据仓库中有超过 5 亿条记录。我正在尝试做一些基准测试,以了解以何种方式保存记录。行存储或列存储。我不会将表与其他表连接起来,它不是分析事实表。两个表都以循环方式分发,并且都包含 17 个分区。它们都有 45 列。当我查询对两列求和时,我希望 Columnstore 表的性能比 rowstore 好得多,但实际情况是,我从 Rowstore 大约 2.5 分钟和 columnstore 大约 10 分钟得到求和结果。我不使用任何过滤器或分组依据。另一方面,当我查询 count(*) 时,柱状表的性能比行存储要好得多。
编辑
虽然我不能与你分享所有细节,因为它是私人的,这里有一些只是为了了解发生了什么。我在 smallrc 和 100DWU 上运行查询。表加载了一个 CTAS 并包含来自多个表的预连接信息,并将通过我们内部应用程序的自定义定义协议(排序/组/过滤器/分页)提供查询服务。该域是赌博的,从 45 列中,我们有 43 列可以用作过滤器。输出集通常包含 3 到 4 列加上两个总和列,每个查询不超过 1000 行。我假设每个月都有一个新分区,我通过 EventDate 每月对两个表进行分区。大多数情况下,我的查询包含 EventDate 作为过滤器。除了与列存储相同的分区外,我的 Rowstroe 表还包含 EventDate 作为聚集索引。添加 EventDate 作为列存储的二级索引带来了一些改进,但性能仍远远落后于行存储。EventDate 为 int 格式,值模式为 yyyyMMdd (20180101)。