从 MariaDB 中的表返回随机行

发布于

这是从 MariaDB 中的表返回随机行的快速方法。

假设我们有一个包含以下数据的表:Pets

SELECT  
    PetId,
    PetName
FROM Pets;

输出:

+-------+---------+
| PetId | PetName |
+-------+---------+
|     1 | Fluffy  |
|     2 | Fetch   |
|     3 | Scratch |
|     4 | Wag     |
|     5 | Tweet   |
|     6 | Fluffy  |
|     7 | Bark    |
|     8 | Meow    |
+-------+---------+

我们可以将该函数与子句和关键字结合使用,以从该表中返回随机行。RAND()ORDER BYLIMIT

例:

SELECT  
    PetId,
    PetName
FROM Pets 
ORDER BY RAND() 
LIMIT 5;

示例结果:

+——-+———+ | PetId | PetName | +——-+———+ | 5 | Tweet | | 7 | Bark | | 1 | Fluffy | | 8 | Meow | | 3 | Scratch | +——-+———+

如果我再次运行它,我会得到这个:

+——-+———+ | PetId | PetName | +——-+———+ | 3 | Scratch | | 8 | Meow | | 4 | Wag | | 7 | Bark | | 6 | Fluffy | +——-+———+

等等…

请记住,这是相当密集的,不应在较大的表上使用。

使用此技术时,MariaDB 读取表中的所有行,为每个行生成一个随机值,对它们进行排序,最后应用子句。这将导致对大型表的查询非常慢。LIMIT

请参阅 MariaDB 网站上的数据采样:高效查找随机行的技术,了解更适合较大表的技术。