Maison > base de données > tutoriel mysql > Comment effectuer efficacement un échantillonnage aléatoire simple dans MySQL ?

Comment effectuer efficacement un échantillonnage aléatoire simple dans MySQL ?

Patricia Arquette
Libérer: 2025-01-05 16:03:43
original
524 Les gens l'ont consulté

How to Efficiently Perform Simple Random Sampling in MySQL?

É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
Copier après la connexion

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

  • O(n) complexité , sans avoir besoin de trier
  • Utilise la fonction rand() intégrée de MySQL pour un nombre efficace génération

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal