我有一个数据库表,里面有大约 30k 条记录。
我想一次随机选择一条记录(当用户要求时),从表中删除记录,然后将其插入另一个表中。
我听说/发现做起来ORDER BY RAND()
可能很慢。所以我使用这个算法(伪代码):
lowest = getLowestId(); //get lowest primary key id from table
highest = getHighestId(); //get highest primary key id from table
do
{
id = rand(lowest, highest); //get random number between a range of lowest id and highest id
idExists = checkIfRandomIdExists( id );
}
while (! idExists);
row = getRow (id);
process(row);
delete(id);
现在,有 30k 条记录,我似乎很快就得到了随机 id。然而,随着表大小减少到 15k、10k、5k、100 等(可能是几个月),我担心这可能会开始变慢。
我可以做些什么来使这种方法更有效,还是有一个行数我应该开始做ORDER BY RAND()
而不是这种方法?(例如,当剩下 5k 行时,开始 ORDER BY RAND() ?)