Échantillonnage aléatoire simple et efficace dans MySQL
De nombreuses applications nécessitent la possibilité d'extraire un échantillon aléatoire simple d'une grande table de base de données. Cependant, l'utilisation de la méthode apparemment intuitive de SELECT * FROM table ORDER BY RAND() LIMIT 10000 peut être d'une lenteur prohibitive pour les tables comportant des millions de lignes.
Solution plus rapide
Une approche plus efficace consiste à utiliser la fonction rand() pour attribuer un nombre aléatoire à chaque ligne, puis filtrer le tableau en fonction de cela. number :
SELECT * FROM table WHERE rand() <= 0.3
Comment ça marche
Cette méthode génère un nombre aléatoire entre 0 et 1 pour chaque ligne. Si ce nombre est inférieur ou égal à 0,3 (30%), la ligne est sélectionnée pour l'échantillon.
Avantages
Version améliorée
Pour encore plus d'efficacité, envisagez d'échantillonner les lignes à 2 à 5 fois la taille de votre échantillon souhaité et de les trier par nombre aléatoire à l'aide d'un index, puis en coupant les résultats à la taille souhaitée :
SELECT COUNT(*) FROM table; -- Use this to determine rand_low and rand_high SELECT * FROM table WHERE frozen_rand BETWEEN %(rand_low)s AND %(rand_high)s ORDER BY RAND() LIMIT 1000
Cette méthode utilise une analyse d'index pour réduire la taille des données avant le tri, ce qui rend il convient aux grandes tables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!