我有一个大的 (1.5M-2M) 记录 MySQL
表,我正在将其索引到 Sphinx
中。
我需要 ID 是随机的/非连续的,因为我正在进行两级排序(order by FieldA DESC,FieldB DESC
),然后默认按 ID 排序。这给我带来了不希望的结果,因为我按供应商存储我的数据,并且一旦实现 FieldA 和 FieldB Order,我希望有更多随机供应商。
由于我不知道如何即时执行此操作,所以我尝试了以下方法,我在小表上测试了它以生成随机的唯一整数:
-- Update IGNORE Table
Set ID=FLOOR(RAND() * 2000000);
但大约一个小时后放弃了这种方法 😐
是否有一些有效的方法来生成随机 ID?
最佳答案
您可以将日期用作唯一 ID,然后使用 key 对其进行加密:
SET ID = HEX(AES_ENCRYPT(CONCAT(NOW(), RAND()), 'secret_key'));
这是一个密码学上不太安全的替代方案 (to enhance performance) :
SET ID = MD5(CONCAT(NOW(), RAND()));
注意:上述两个建议都使用随机盐和日期来避免时间戳冲突,如果在同一秒内插入多行,否则会存在时间戳冲突。
关于mysql - 存储 MySql 表的随机 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48035707/