在我的postgreSQL数据库中,我有一个bigint,它是base36转换。
我有包含short_id的base36和十进制版本的url,但我将根据url so base36进行查询。
base36 short_id可以作为我的primary key以获得更好的性能吗?
发布于 2014-08-12 21:06:39
至少在PostgreSQL中,PRIMARY KEY与性能无关。它关乎正确性和数据结构。查询规划器不关心PRIMARY KEY,只关心通过定义PRIMARY KEY约束创建的UNIQUE NOT NULL索引。
您可以定义任何您喜欢的索引。想要另一个唯一索引吗?只需创建一个。
如果保证base36列是唯一的,那么它就是主键的候选者。这是否是最好的选择,以及它是否真的比你目前正在做的任何事情都快,这在某种程度上取决于应用程序。
请注意,额外的索引不是免费的-它们确实会导致插入和更新的开销。因此,不要疯狂地为写繁重的表的每一列创建多个索引。
顺便说一句,其他一些数据库系统确实对PRIMARY KEY有更强的性能影响。特别是,在使用按索引组织的表(其中主表采用b-tree结构)的数据库系统上,聚集键(通常也是主键)的选择对性能影响很大。
在PostgreSQL中,每个表都只是一个堆,所以它是无关的。
https://stackoverflow.com/questions/25261222
复制相似问题