MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Renvoyer des lignes aléatoires d'une table dans MariaDB

Voici un moyen rapide de renvoyer des lignes aléatoires à partir d'une table dans MariaDB.

Supposons que nous ayons une table appelée Pets avec les données suivantes :

SELECT  
    PetId,
    PetName
FROM Pets;

Résultat :

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

Nous pouvons utiliser le RAND() fonction en conjonction avec un ORDER BY clause et la LIMIT mot-clé pour renvoyer des lignes aléatoires de cette table.

Exemple :

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

Exemple de résultat :

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

Et si je le relance, j'obtiens ceci :

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

Et ainsi de suite…

Gardez à l'esprit que cela est assez intensif et ne doit pas être utilisé sur des tables plus grandes.

Lors de l'utilisation de cette technique, MariaDB lit toutes les lignes de la table, génère une valeur aléatoire pour chacune d'elles, les ordonne, et finalement applique le LIMIT clause. Cela entraînera une requête très lente sur les grandes tables.

Voir Data Sampling:Techniques for Efficiently Finding a Random Row sur le site Web MariaDB pour des techniques plus adaptées aux grandes tables.