sql - 什么时候索引在小引用表上是合理的?

标签 sql postgresql indexing

在我的架构中,我有很多像这样的小引用表

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/

相关文章:

mysql - 如何将子查询结果中的第一个值设置为 SQL 中的变量

sql - 复式应计会计概念

postgresql - PSQL 不区分大小写的 INDEX lower() 不起作用

mysql - 如果我在不先删除索引的情况下删除 MySQL 列会发生什么?

sql - DB2 将一个值增加一定数量

MySQL - 使用一个查询的结果用于另一个查询

postgresql - 当添加两个或更多权限条件时,Hasura 查询变得指数级变慢

ruby - 导轨 4 : column reference "updated_at" is ambiguous with Postgres

java - 将数据从 PostgreSQL 迁移到 MongoDB

多个 FULLTEXT 索引上的 MySQL SELECT。结果极其缓慢