我试图从一个包含大约 700 万条记录的表中获取 4 个随机结果。此外,我还想从同一个表中获取 4 个按类别过滤的随机记录。
现在,正如您想象的那样,对这么大的表进行随机排序会导致查询花费几秒钟,这并不理想。
我为non-filtered
结果集想到的另一种方法是让 PHP 选择 1 - 7,000,000 左右之间的一些随机数,然后IN(...)
使用查询来只抓取这些行 - 是的,我知道这种方法有需要注意的是,如果具有该 id 的记录不再存在,您可能会得到少于 4 个。
但是,上述方法显然不适用于类别过滤,因为 PHP 不知道哪些记录号属于哪个类别,因此无法选择要从中选择的记录号。
有没有更好的方法可以做到这一点?我能想到的唯一方法是将每个类别的记录 ID 存储在另一个表中,然后从中选择随机结果,然后在辅助查询中仅从主表中选择那些记录 ID;但我确定有更好的方法!?