我正在建立一个网站,每个帐户都有一个ID.但是,我不想让它增量,意思是:
id = 1
id = 2
...
id = 1000
我想要的是随机ID:
id = 2355
id = 5647734
id = 23532
...
(原因是避免机器人只通过增加URL中的ID来检查所有帐户配置文件 - 也许是其他原因,但这不是问题)
但是,我担心注册时的性能.
它将是这样的:
while(不采用RANDOM_ID):生成新的RANDOM_ID
在为新帐户生成新ID时,我将查询数据库(MySQL)以检查每个代的ID是否存在.
有没有更好的解决方案呢?
使用随机ID有什么不利之处吗?
提前致谢.
有许多原因没有这样做:
您所写的解决方案不具有交易安全性; 同时两个事务都可以生成相同的"随机"ID.
如果为了使其安全而序列化事务,则会扼杀性能,因为查询将锁定每个冲突行,直到找到备用ID.
使用随机ID作为主键将使聚集索引中的地狱碎片化.对于uuids来说这已经够糟了 - 自动生成的标识列的重点就是让你可以生成一个安全的序列.
为什么不使用常规主键,但不要在任何URL中使用它?生成辅助非顺序ID以及它 - 例如uuid - 索引它,如果您真的担心安全性,则在应用程序的任何面向公众的段中使用此列而不是主键.