MySQL: 从600K行中快速选择10个随机行
在大多数情况下,我们在MySQL数据表中使用SELECT
语句来查询指定的数据。但有时我们需要从表中随机取出一些数据,比如我们需要从一个拥有600K行的表中取出10个随机行。在这篇文章中,我们将介绍如何使用MySQL快速从表中选出随机行。
阅读更多:MySQL 教程
方法一:使用ORDER BY RAND()
使用ORDER BY RAND()
函数可以随机排序结果中的行。但是,当表中的行数较多时,该方法的效率会非常低下,因为MySQL需要为随机排序的每一行计算一个随机数,并对所有行进行排序。这会消耗大量的时间和资源。
SELECT *
FROM table_name
ORDER BY RAND()
LIMIT 10;
方法二:使用主键或索引字段进行随机排序
我们可以通过利用主键或索引字段来进行随机排序。对于拥有大量数据的表,这种方法比ORDER BY RAND()
更快。
SELECT *
FROM table_name
ORDER BY primary_key_or_index_column
LIMIT 10;
方法三:使用子查询和LIMIT
使用子查询可以从表中筛选出一些随机行,然后再使用ORDER BY
进行排序。这个方法可以在我们不需要完全随机的情况下使用。例如,我们可以只选择最近发布的10篇文章中的一部分作为推荐:
SELECT *
FROM (
SELECT *
FROM table_name
ORDER BY publish_date DESC
LIMIT 10
) AS temp_table
ORDER BY RAND()
LIMIT 5;
总结
以上是三种快速从MySQL表中随机选择行的方法。虽然每种方法都有其优缺点和适用场景,但在大多数情况下,使用主键或索引字段进行排序要快得多,这也是最常用的方法之一。