我有一个正在编写代码的网站项目,并且有一个存储汽车信息的表格。该表有如下信息,表中大约有 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/