我有一个已存在的模式,其中包含一个非自增主键。此主键被用作其他十几个表中的外键。
我继承了一个存在严重性能问题的程序。当前情况下,当向该表添加新行时,会创建一个新的唯一 ID,方法如下:
1) a query for all existing primary key values is retrieved
2) a random number is generated
3) if the number does not exist in the retrieved values, use it, otherwise goto (2)
该应用程序是多线程和多服务器的,因此仅在启动时抓取现有ID不是一个选项。我没有来自初始请求的唯一信息可供获取并转换为伪唯一值(如成员ID)。
我了解理论上对内部进行手术以添加自动递增到现有的主键是可能的。我也了解到可以系统性地删除所有指向此表的外键,然后创建-重命名-插入表的新版本,然后再添加回外键,但是此表格式由第三方应用程序规定,如果我搞砸了就会发生糟糕的事情。
是否有一种方法可以利用sql/mysql来生成唯一的行值?
我想到的最接近的方法是从大空间中随机选择一个数字,希望它在数据库中是唯一的,当偶尔发生冲突时则重试。
有什么建议吗?