sequence
这是一个关于 PostgreSQL性能的通用问题,因为在选择使用一个而不是每个表时,它们是否可能成为高写入并发数据库的瓶颈。
我概述了性能和瓶颈,因为我完全知道 PostgreSQL 序列是安全的,正如在其他地方和 PostgreSQL 中解释的那样:在恶劣的多用户环境中使用 SELECT nextval 生成器线程安全吗?. 另外,我不介意序列可能产生的漏洞。
我有许多表(< 60),每个表都有自己的代理主键id
,声明为
id int generated by default as identity
大多数包含公共实体的表都由共享通用表的子集详细说明。例如,表如product
、或由 table 详细说明category
,它包含应用程序上不同语言的公共对象的所有 varchars。post
user
text
由于id
所有这些公共实体的列可能具有相同的值,因此我必须使用该对
object_id int not null,
object_type tobject not null,
唯一地引用text
它详细描述的公共实体。
很明显,id
与来自单个序列的具有唯一值的列相比,我可以object_type
从所有共享表和应用程序的 SQL 代码中删除列。它还将简化(有望加速)共享表上的索引。
当我计划增加共享表的数量时,我的问题是序列生成器如何在高写入并发上执行。insert into
当许多并发尝试发出时,单个序列生成器会成为瓶颈nextval
吗?每张桌子留一个会更好吗?