在我的postgreSQL数据库中,我有一个bigint
,它是base36
转换。
我有在base36
和十进制版本中包含short_id的URL,但是我将根据URL查询,以便base36。base36
short_id可以用作我的primary key
以获得更好的性能吗?
最佳答案
至少在PostgreSQL中,PRIMARY KEY
与性能无关。它与正确性和数据结构有关。查询计划者不关心PRIMARY KEY
,仅关心通过定义UNIQUE NOT NULL
约束创建的PRIMARY KEY
索引。
您可以定义任何喜欢的索引。是否需要另一个唯一索引?只需创建一个。
如果base36
列被保证是唯一的,则可以,它是主键的候选项。它是最佳选择,还是实际上比您目前正在执行的速度更快,这在某种程度上取决于应用程序。
请注意,额外的索引不是免费的-它们的确会产生插入和更新的费用。因此,不要为写繁重的表在每列上创建多个索引而发疯。
顺便说一句,其他一些数据库系统对于PRIMARY KEY
确实具有更强的性能影响。特别是,在使用索引组织表(主表为b树结构)的DB系统上,选择集群键(通常也是主键)对于性能而言是一件大事。
在PostgreSQL中,每个表只是一个堆,因此不相关。