在SQL事实表中为连接的外键字段编制索引



我有一个由5个外键和5个值列组成的大型事实表(50m行(。

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

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

这是一个示例:

Dim1
Dim1key
Dim1Desc
Dim2
Dim2key
Dim2Desc
Fact_Data
Dim1key
Dim2key
Values1
values2
Values3

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

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

还是我把这件事复杂化了?只想先检查一下,因为索引非常耗时(目前使用azure S1免费试用DTU(

感谢

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

然而,如果你被迫做这样的事情,你可以向事实表中添加一个计算列,持久化它,并构建一个索引:

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'

最新更新