php - 从具有 10k+ 记录的表中选择随机行

标签 php mysql ruby-on-rails innodb

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

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

表格包含诸如

之类的行

车 table -

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

最佳答案

你可以这样试试。

找出表的最大 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;

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

关于php - 从具有 10k+ 记录的表中选择随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16703550/

相关文章:

mysql - 关联的 DQL 邮政编码距离

php - 我应该如何管理这个数据库?

选择语句中的 PHP/MySql if 运算符

ruby-on-rails - 我收到了 Paypal IPN 罚款,但我的应用程序仅在从 paypal 帐户完成时才记录它。由 UTF-8/ISO-8859-1 引起

ruby-on-rails - 如何在 Rails 中的 Mechanize 上 stub HTTP 请求?

PHP无法插入数据

php - 名为 “db2” 的 Symfony2 Doctrine ORM 管理器不存在

ruby-on-rails - 在创建错误和 XMLHttpRequest.handleError 时发生reactjs网络错误

php - 从 *.sql 文件进行多重查询,无需访问 phpmyadmin

php - Moodle 3.3.2 ERR_TOO_MANY_REDIRECTS