0

我有一个包含 5 个外键和 5 个值列的大型事实表(50m 行)。

我已经创建了 5 个维度表并索引了 Fact 表中的外键。到目前为止,性能非常好,使用任何维度查询事实表都非常快。

需求略有变化(表用于报告),现在用户希望能够使用连接字段查询表,该字段由两个合并的维度字段组成。

这是一个示例:

Dim1
Dim1key
Dim1Desc

Dim2
Dim2key
Dim2Desc

Fact_Data
Dim1key
Dim2key
Values1
values2
Values3

如果我使用dim1key = 5dim2key = 10查询表,它非常快,但我现在想使用合并的 dim1 和 dim2 键查询表,例如mergekey = "5-10"。我尝试使用concat_WS('-',Dim1key,Dim2key) = "5-10"查询表, 但它非常慢并且显然没有利用任何索引。

我在这里采取的最佳行动是什么?我是否应该使用上面的 concat_ws 函数将合并列添加到我的事实表中,然后创建一个包含合并字段的新维度表,然后在事实表中索引新创建的合并列?

...或者我是否过于复杂了?只想检查拳头,因为索引非常耗时(目前使用 azure S1 Free trial DTU)

谢谢

4

1 回答 1

1

这是一个荒谬的要求。许多人使用大量高维事实表,而不必将键连接为字符串。

但是,如果您被迫做这样的事情,您可以将计算列添加到事实表,将其持久化并构建索引:

alter table fact add merged_key as (concat_ws('-', Dim1key, Dim2key)) persisted;

create index idx_fact_merge on fact(merged_key);

这可以查询表为:

where merged_key = '5-10'
于 2020-03-13T18:52:01.693 回答