我有一个超过80,000行的数据库表。不幸的是,我的查询使用ORDER BY RAND()
,我开始看到它影响CPU。我决定删除ORDER BY RAND()
,而是做一些像id>=500 (random value) && id<=1000 (random value)
这样的事情,这样WHERE子句每次都会随机搜索500行。
基本上我需要的是PHP中的东西来抓取最小和最大id值并生成两个随机数,一个必须大于另一个500
(所以500个顺序间隙)。结果应该类似于:
$min_id = 500;
$max_id = 80000;
// result should pick random number but make sure there's a gap of 500.
$min_random_value = 578;
$max_random_value = 1078;
等。这可能吗?
我知道我可以从min, max
中随机选择一个值,然后加或减500。我担心的是,如果随机值是79999,并加上500,将使其无效。
用php生成一个随机数,如:
$min = rand(500, $max_id);
然后在生成的数字上加上500,得到最大值:
$min = rand(500, $max_id);
$max = $min + 500;
确保您的$max
编号不大于80000 ($max_id
),执行if语句:
$max_id = 80000;
$min = rand(500, $max_id);
$max = $min + 500;
if($max > $max_id)
{
$max = $min;
$min = $min - 500;
}
试试这个
$max_id = total rows in your table;
$max_val = $max_id-500;
$start = rand(1, $max_val);
$sql = "SELECT * FROM tbl_name LIMIT $start , 500";