gpt4 book ai didi

sql-server-2008 - 我应该在事实表中的这些外键上放置一个非聚集索引吗

转载 作者:行者123 更新时间:2023-12-04 07:14:16 25 4
gpt4 key购买 nike

外键简介

FK      Distinct Values      %
---- --------------- ------
Id1 1 0.1%
,Id2 4 0.3%
,Id3 5 0.3%
,Id4 6 0.4%
,Id5 6 0.4%
,Id6 95 6.1%
,Id7 97 6.2%
,Id8 1423 90.7%

所有外键都已经组成了集群Primary Key。此事实表是包含 6 个维度(Id 的 6、7 和 8 引用相同的日期维度)的星型模式的一部分。

事实表目前大约有 1800 行(小得令人难以置信),并且预计每个月都会增长该数量。

每个外键都应该有自己的非聚集非唯一单列索引以促进连接吗?如果是这样,为什么?

每个外键都将成为其维度表中聚簇索引(主键)的一部分。

如果应该在外键上放置索引,那么应该将填充因子和填充索引设置为多少,因为列的基数较低?

最佳答案

您的个人资料中的“%”列并没有真正意义 - 为什么要找到跨字段的不同值的“百分比”?您需要有关不同值分布的统计信息——Id8 上 99% 的键是否相同?它们分布均匀吗?等

请注意,我在这里所说的一切都适用于更大的表。每月 1800 行,索引可能会浪费您的空间和时间。

@jrara 关于索引所有 dims 的“规则”是一个易于应用的规则,但如果仅此而已,则很容易出错。例如,我不想在我的 1 亿行客户维度上使用 oracle 位图索引。

索引取决于针对您的数据的查询。如果您正在对事实表进行全面扫描以对“摘要”报告执行聚合和分组,则索引将无济于事。当用户试图过滤维度的属性时,它们会有所帮助,并且该过滤器导致您只需从事实表中查找一小部分记录。你的 table 有一个主要的入口点吗?人们通常会根据“Id8”维度的属性进行过滤,然后希望根据其他维度的属性进行分组吗?

基本上您的问题的答案是:

是否每个外键都有自己的非聚集非唯一单列索引以促进连接?

一般来说,是的,只要维度表很小,并且暗键在事实表中分布相对均匀。通常使用索引访问获取 99% 的事实表行会更糟。

鉴于列的基数较低,应将填充因子和填充索引设置为多少?

将 FILLFACTOR 降低到 100% 以下导致索引读取变慢,因为索引中有更多(空)页供 DB 读取。由于数据仓库是为快速选择而设计的,所以我真的不建议您向下调整填充因子。

话虽这么说,在少数情况下,调整您的 FILLFACTOR 可能是有意义的。如果事实表非常大(数百 GB/TB),并且重建索引需要数小时,并且您可能每月只重建一次索引甚至更少。在这些情况下,您需要计算出每天要添加到表中的数据量(百分比),并相应地设置填充因子。

关于sql-server-2008 - 我应该在事实表中的这些外键上放置一个非聚集索引吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com