mysql重载RAND查询备选方案

时间:2012-01-11 14:11:30

标签: php mysql random sql-order-by

我有查询可以获得10个随机帖子,而且你知道这是一个非常缓慢而繁重的查询,有没有其他选择提交这个查询而没有任何缓慢的外观?

我当前的rand查询:

SELECT * FROM posts ORDER BY RAND() LIMIT 10

1 个答案:

答案 0 :(得分:0)

来自MySQL文档:

SELECT * FROM tablename ORDER BY RAND()LIMIT 1

适用于小型表,但是一旦表大于300,000条记录,这将非常慢,因为MySQL必须处理表中的所有条目,随机排序然后返回有序结果的第一行,这种排序需要很长时间。相反,你可以这样做(至少如果你有一个auto_increment PK):

SELECT MIN(id),MAX(id)FROM tablename;

将结果提取到$ a

// php code

$ ID =兰特($一个[0],$ A [1]);

SELECT * FROM tablename WHERE id> ='$ id'LIMIT 1