一亿行的 MySQL 表,主键 ID 不连续,怎样随机取 30 行速度最快?
資深大佬 : kisshere 4
ORDER BY rand()速度太慢,主键又不连续(类似于 1,6,7,33,78,93 这种递增),要不然都可以用 php 生成 30 个随机数 id 去 query 了
大佬有話說 (46)
ORDER BY rand()速度太慢,主键又不连续(类似于 1,6,7,33,78,93 这种递增),要不然都可以用 php 生成 30 个随机数 id 去 query 了
在网上抄来的
所有 ID 单独维护一份感觉比较合适,上 redis 或者自己维护个 set 。
要么就用一些不那么随机的方案。
直接程序随机生成 ID 呗,如 #3 所说取满 30 个就行了。
很简单,举个例子:原始 id 是 1, 5, 6, 7 。那么用 id >= min(id) + rand() * (max(id) – min(id)) limit 1 取数字,每个数字被选取的概率为:
1 = 4/7
5 = 1/7
6 = 1/7
7 = 1/7