在我的postgreSQL数据库中,我有一个bigint
及其base36
转换。
我的网址包含base36
中的short_id和十进制版本,但我会根据网址查询base36。
可以base36
short_id成为我的primary key
以获得更好的效果吗?
答案 0 :(得分:1)
至少在PostgreSQL中,PRIMARY KEY
与性能无关。这是关于正确性和数据结构。查询规划器不关心PRIMARY KEY
,只关心通过定义UNIQUE NOT NULL
约束创建的PRIMARY KEY
索引。
您可以定义自己喜欢的索引。想要另一个独特的指数只需创建一个。
如果base36
列保证唯一,那么是,它是主键的候选者。它是否是最佳选择,以及它实际上是否比您目前正在做的任何事情都快,在某种程度上依赖于应用程序。
请注意,额外的索引不是免费的 - 它们会导致插入和更新的成本。所以不要疯狂地为每个列创建多个索引以用于写入繁重的表。
顺便说一句,其他一些数据库系统做对PRIMARY KEY
有更强的性能影响。特别是,在使用索引组织表的DB系统上(主表采用b树结构),选择聚类键 - 通常也是主键 - 对性能来说是一件大事。
在PostgreSQL中,每个表只是一个堆,所以它不相关。