这是我目前来自PHP的调用代码:
$getfromdb = "SELECT `myTable`.* FROM `myTable` WHERE `status`=1 and ORDER BY rand() LIMIT 4";
现在这足够了,因为表中的行数非常小(<1000)。 但是,
(a)随机性不够(意味着经常会返回一些相同的行),
(b)表的大小会迅速增加,这意味着性能会受到影响。
我怎样才能使代码更加随机和高效?
主键(id)上有一个自动增量 - 但也有漏洞。
答案 0 :(得分:3)
如果您知道该表的近似基数,我认为您可以随机设置OFFSET
。例如:
$cardinality = 100000;
$limit = 4;
$offset = rand(0, $cardinality - $limit);
$getfromdb = "
SELECT * FROM (
SELECT `myTable`.* FROM `myTable` WHERE `status` = 1
OFFSET $offset LIMIT 500
) ORDER BY rand() LIMIT $limit
";
嗯,它的采样方法有偏见。