簡體   English   中英

在 SQL 事實表中索引連接的外鍵字段?

[英]Indexing a concatenated foreign key field within SQL fact table?

我有一個大的事實表(50m 行),由 5 個外鍵和 5 個值列組成。

我已經創建了 5 個維度表並索引了事實表中的外鍵。 到目前為止,性能非常好,使用任何維度查詢事實表都非常快。

需求略有變化(表用於報告),現在用戶希望能夠使用由 2 個合並的維度字段組成的串聯字段來查詢表。

這是一個示例:

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 免費試用版 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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM