我有一个我正在编码的网站项目,我有一个存储汽车信息的表格。该表有如下信息,表中大约有20列,我只想知道从一行中随机获取所有列数据的最快方法。我知道有一个“ORDER BY RAND()”,但我读过它使用起来很慢,我担心因为这可能会导致问题的大表,是否有其他选择。
我将在InnoDB中使用MySQL,但如果使用备用数据库引擎选择随机行可以更有效地完成,则可以更改。该网站将使用PHP(潜在的RubyOnRails)进行编码,数据库将从Python脚本中填充,这将填补汽车信息网站。
表包含
等行CarTable -
答案 0 :(得分:1)
如果ORDER BY RAND()
的效果太慢,您可以使用两个查询来执行此操作。首先,做:
SELECT COUNT(*) c FROM CarTable
然后在PHP中选择0和c-1
之间的随机整数:
$rownum = rand(0, $c);
然后,再做一次查询:
SELECT * FROM CarTable
LIMIT :rownum, 1
答案 1 :(得分:1)
你可以这样试试。
找出你最大的表格。
SELECT id FROM car ORDER BY id DESC LIMIT 1;
-- This result can be cached
计算最小id(或仅1)和最大id之间的rand值。
$rand_id = mt_rand(1, $max_id);
选择最近的行。
SELECT * FROM `car` WHERE id >= ? ORDER BY id LIMIT 1;
但如果表有“漏洞”,结果将不是“真随机”。但是,我认为,这在你的情况下是正常的。
答案 2 :(得分:0)
在Rails中,你可以这样做:
class MyModel < ActiveRecord::Base
def self.random_record
find :first, offset: rand(count)
end
end