Php 将随机BIGINT用作主键会显著影响性能吗?

Php 将随机BIGINT用作主键会显著影响性能吗?,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,背景: 我试图找到在API中存储ID的最佳方法。UUID存在许多与性能相关的问题,在某些情况下,增量ID是不安全的。在尝试了不同的方法之后,我发现randomBIGING()是性能和唯一性之间的最佳折衷方案 问题: 当涉及到连接之类的操作时,用作主键的随机BIGINT(例如9007199254740991)会显著影响查询性能吗 在小型数据库上,它的性能很好,但我从来没有机会在大型生产数据库上测试它。主键通常用作聚集索引,因此如果您的标识符未排序(即默认的自动增量已排序),则插入时会出现性能问题。

背景:

我试图找到在API中存储ID的最佳方法。UUID存在许多与性能相关的问题,在某些情况下,增量ID是不安全的。在尝试了不同的方法之后,我发现random
BIGING
()是性能和唯一性之间的最佳折衷方案

问题:

当涉及到连接之类的操作时,用作主键的随机
BIGINT
(例如9007199254740991)会显著影响查询性能吗


在小型数据库上,它的性能很好,但我从来没有机会在大型生产数据库上测试它。

主键通常用作聚集索引,因此如果您的标识符未排序(即默认的自动增量已排序),则插入时会出现性能问题。 联接不应受到影响。 顺便说一句,对于UUID——同样,它没有被排序,但是有一种算法让UUID部分随机生成,部分从当前时间构建,然后进行排序


什么意思,简单的自动递增是不安全的?您需要什么安全性?

自动增量问题:-它可能会公开业务数据(例如,一些公司可能不想公开订单数量)。-合并数据库是一场噩梦(当您运行多个代码实例,并试图将它们合并为一个时)。-在某些情况下,您可以强制执行机密数据(通常由程序员错误引起)。自动增量滥用的示例:一位非高级开发人员构建了一个平台用户可以在彼此之间发送消息的系统。因为API的语法类似于/users/{id}/messages,所以向所有用户发送垃圾邮件非常简单。如果使用唯一标识符,那么同一个实现将是相当安全的。那么,Bigint也不能保证安全性。如果您正在考虑合并数据库等,请尝试使用按时间顺序排列的UUID。因此,您将有快速插入,通过索引连接将是快速的,并且非常安全,不会出现冲突。随机生成两个相等的16位数字的概率小于有人将记录输入错误数据库并导致合并冲突的概率。良好的冲突处理比伪保证每个数据库中都有唯一的ID更重要。