gpt4 book ai didi

database-design - 索引外键列

转载 作者:行者123 更新时间:2023-12-02 08:55:18 24 4
gpt4 key购买 nike

在所有外键列上放置索引是否是经验法则?看来它们经常用于表联接中,并且会从索引中受益。

如果FK列只有2或3个可能的值怎么办?例如,如果它正在引用状态表。在FK字段上放置索引是否仍然明智?

编辑
我想再做一遍。 [是否建议在几乎没有可能值(2或3)的列上放置索引?]
END EDIT

最佳答案

(这里有两个问题:机器效率和DBA效率。)

根据经验,查询性能得益于JOIN子句和WHERE子句中使用的列索引。而且,当然,插入,更新和删除性能会受到这些相同索引的影响。 (因为索引必须与表一起更新。)

如果一列中的值很少,并且有充分的理由要避免将实际值存储在表中,那么我更喜欢将人类可读的代码作为外键引用的目标。例如,ISO 5218指定了这些代表人类性别的代码。

Sex_id  Sex
--
0 Not known
1 Male
2 Female
9 Not applicable

我不希望人们记住9表示不适用。如果这是我的全部,那么每当我需要产生供人们阅读的输出时,都必须加入此表。

但是我可以在该表中添加一列,将其声明为唯一,并将其​​用作外键引用的目标。大部分时间我都不必加入该表。哎呀,我可能永远不必加入。避免联接与机器效率有关。
sex_id  sex_code   sex
--
0 Un Not known
1 M Male
2 F Female
9 NA Not applicable

所有这三列都应声明为唯一。在大多数平台上,这意味着这三列中的每一列都将获得索引。即使选择性很低,我也会索引引用sex_code的列。

为什么?与重新评估是否现在添加索引相比,我有更好的事情要做,因为此版本中的优化器足够聪明,可以利用它。这与DBA的效率有关。

关于database-design - 索引外键列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5451867/

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