在我的架构中,我有很多像这样的小引用表
CREATE TABLE category
(
category VARCHAR PRIMARY KEY
);
其中将包含 20-250 行。
我知道使用 INDEX 意味着 INSERT 性能以及额外的磁盘空间使用将受到轻微影响。显然我根本不关心这些,因为我的引用表很小而且很少改变。
我只关心主表上高频插入的性能,其中有许多列引用了这些众多的小表。
假设我在主表中插入一行;为了强制执行给定的 REFERENCE 约束,Postgres 是否需要在引用的表上执行一种 SELECT,以检查该值是否存在?
如果是这样,那么即使表非常小,考虑到我预期插入主表的插入频率足够高,几乎每个小表上的索引是否合理?
还是我找错了树? (没有双关语)
最佳答案
显式索引是合理的,但不是必需的。引用列应声明为主键。这将自动创建一个索引。为什么需要主键?参照完整性。您希望确保引用此类表的表具有正确的值。
我建议您使用 2 字节或 4 字节数字作为主键。这减少了引用引用表的其他表的开销。此外,当键是固定长度而不是可变长度时,索引的效率会稍微高一些。
所以,我建议这样:
CREATE TABLE category (
categoryId smallint generated always as identity primary key
category VARCHAR unique
);
关于sql - 什么时候索引在小引用表上是合理的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59535258/