mysql - 存储 MySql 表的随机 ID

标签 mysql random sql-order-by

我有一个大的 (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/

相关文章:

mysql - 为什么我不能使用 Fluent NHibernate 将其插入到 MySQL InnoDB 表中?

MySQL - 索引 innodb 外键

php - 在 codeigniter 中一定时间间隔后减少产品价格

mysql - 我们可以在 MySQL 的 ORDER BY 子句中使用别名字段吗?

MySQL 选择 1 AS sort_col : is there is a column for 1?

python - 如何在 sqlalchemy 中的变量中提供排序顺序?

mysql - 基于条件的值的总和

Java hashmap 选择随机但偶然

python - 每当调用 rand() 时,是否会自动调用 numpy.random.RandomState()?

java - 递归函数中的错误