Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 截至2018年,在Postgres中使用bigint而不是int作为主键是否存在性能差异?_Sql_Postgresql_Primary Key_Biginteger - Fatal编程技术网

Sql 截至2018年,在Postgres中使用bigint而不是int作为主键是否存在性能差异?

Sql 截至2018年,在Postgres中使用bigint而不是int作为主键是否存在性能差异?,sql,postgresql,primary-key,biginteger,Sql,Postgresql,Primary Key,Biginteger,我希望在我的许多表(users表、posts表等)中都有随机主键,就像medium.com的设计一样(看看url或API中的文章id,它是一个12个随机十六进制字符的字符串,很可能对应一个64位整数),我获得了更大的空间,它的设计也比使用串行主键来抵抗自动请求、获取网站信息(如总帖子、总用户数或抓取)更安全 如今,存储差异并不是那么重要,是否会有重大的性能差异,特别是在获取查询方面,还是在2018年非常微不足道,特别是如果Postgres托管在RDS上?是否有任何性能差异?对串行密钥为4字节,您

我希望在我的许多表(users表、posts表等)中都有随机主键,就像
medium.com
的设计一样(看看url或API中的文章id,它是一个12个随机十六进制字符的字符串,很可能对应一个64位整数),我获得了更大的空间,它的设计也比使用串行主键来抵抗自动请求、获取网站信息(如总帖子、总用户数或抓取)更安全

如今,存储差异并不是那么重要,是否会有重大的性能差异,特别是在获取查询方面,还是在2018年非常微不足道,特别是如果Postgres托管在RDS上?

是否有任何性能差异?对串行密钥为4字节,您的密钥为8字节。这是更多的空间,因此更多的工作

这有区别吗?可能不会。有些数据库会按主键对数据进行聚类(即排序)。博士后不这样做。这种集群是一个问题,因为它会立即导致随机生成密钥的碎片


对于您提议的关键结构,您似乎有一个很好的用例。虽然我不认为这是一个先验的问题,但您可能希望测试差异,看看它是否对您的应用程序有影响。

这个问题太广泛了-如何说明未指定硬件上未指定平台的性能?这不是因为愚蠢,而是因为不可能给出一个好的答案。我希望
SELECT
性能不会显著提高,但生成这些键(您没有显示)的代码可能比使用序列慢得多。我承认我不理解你所期望的优势。我是从postgres主键搜索算法的角度讲的。那么生成密钥的代码呢?这是个大问题吗?它只是一个随机的12个十六进制字符,从软件层随机生成并转换成64位整数。我不明白为什么你要把一个12字节的十六进制数字“编码”成一个bigint?你不会从中得到任何东西-你只有一个缺点,那就是首先生成一些十六进制数,然后将其转换为bigint-为什么不从bigint开始呢?你如何“获得更大的空间”?您将其存储在bigint中,因此受bigint可以存储的范围的限制。至于原始查询性能,我不认为会有很大的不同。测试原始性能的一种方法是使用所有键都是整数的运行,然后更改表以将它们存储为bigint并重复测试。我仍然怀疑使用自己的序列生成器是否值得。我不相信“安全性”这一点——默默无闻的安全性从未真正起作用。无论数字是否按顺序排列,您仍然需要执行必要的安全检查。因此,实施安全系统的努力不会因此减少,但您最终会遇到数字生成的瓶颈,这很可能会影响系统的整体性能。谢谢!我并不真正关心大小的差异,因为在今天的存储中,成本差异是微不足道的,我只关心获取请求的延迟。另一个问题:在搜索算法方面,通过随机分布的索引(例如,在我的例子中通过随机主键搜索)通常比串行索引更快还是更慢。它们使用基于树的索引存储(通常),因此值的顺序不会产生不同的影响。