1

我有一个我目前正在编码的网站项目,并且我有一个存储汽车信息的表格。该表有如下信息,表中有大约 20 列,我只想知道从一行中随机获取所有列数据的最快方法是什么。我知道有一个“ ORDER BY RAND() ”,但我读到它使用起来很慢,而且我担心因为大表可能会导致问题,是否有替代方案。

我将在 InnoDB 中使用 MySQL,但如果使用替代数据库引擎可以更有效地选择随机行,则可以更改此设置。该网站将使用 PHP(可能是 RubyOnRails)进行编码,数据库将由一个 Python 脚本填充,该脚本将抓取汽车信息网站。

表包含诸如

车桌 -

  • 车名
  • 汽车制造商
  • 门号
  • ...
  • ...
  • ...
4

3 回答 3

1

如果性能ORDER BY RAND()太慢,你可以用两个查询来完成。首先,做:

SELECT COUNT(*) c FROM CarTable

然后c-1在 PHP 中选择一个介于 0 和 之间的随机整数:

$rownum = rand(0, $c);

然后,执行另一个查询:

SELECT * FROM CarTable
LIMIT :rownum, 1
于 2013-05-23T00:19:49.113 回答
1

你可以试试这个方法。

找出你的表的最大 id。

 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;

但是如果表有“洞”,结果就不会是“真正的随机”。但是,我认为,在你的情况下,这很正常。

于 2013-05-23T00:28:26.493 回答
0

在 Rails 中,您可以执行以下操作:

class MyModel < ActiveRecord::Base
  def self.random_record
    find :first, offset: rand(count)
  end
end
于 2013-05-23T00:13:55.520 回答