Maison > base de données > tutoriel mysql > Comment fonctionne réellement la fonction ORDER BY RAND() de MySQL ?

Comment fonctionne réellement la fonction ORDER BY RAND() de MySQL ?

DDD
Libérer: 2024-11-03 00:23:02
original
557 Les gens l'ont consulté

How Does MySQL's ORDER BY RAND() Function Actually Work?

Comment fonctionne la fonction ORDER BY RAND() de MySQL

La fonction ORDER BY RAND() de MySQL génère des résultats apparemment aléatoires, mais son mécanisme réel diffère de la croyance commune. Contrairement aux hypothèses, MySQL n'ajoute pas de colonne de valeurs aléatoires qui influence le tri. Au lieu de cela, il utilise le processus suivant :

  1. Génération d'un nombre aléatoire : La fonction génère un nombre aléatoire entre 0 et 1 pour chaque ligne du tableau.
  2. Tri des lignes : Les lignes sont ensuite triées par ordre croissant en fonction des nombres aléatoires générés.
  3. Récupération des données : Lorsque LIMIT est utilisé avec ORDER BY RAND() , MySQL récupère les lignes du haut de l'ensemble de résultats triés.

Temps d'exécution inattendus

Les requêtes de test fournies démontrent des temps d'exécution inattendus :

Query Execution Time
SELECT * FROM table ORDER BY RAND() LIMIT 1 30-40 seconds
SELECT id FROM table ORDER BY RAND() LIMIT 1 0.25 seconds
SELECT id, username FROM table ORDER BY RAND() LIMIT 1 90 seconds

Cette variation du temps d'exécution est attribuée aux différentes données récupérées par chaque requête. La sélection de la ligne entière (*) entraîne un coût plus élevé que la récupération de colonnes spécifiques (id) ou la récupération de données déjà indexées (id).

Méthodes alternatives pour une sélection aléatoire rapide

Bien que ORDER BY RAND() puisse ne pas offrir des performances optimales, des méthodes alternatives peuvent fournir des résultats plus rapides :

  • Méthode de Jay : Utiliser une sous-requête pour générer un identifiant aléatoire pour la sélection de lignes est efficace mais peut devenir fastidieux lorsqu'il s'agit de requêtes complexes.
  • Approche basée sur une procédure : La mise en œuvre d'une procédure qui parcourt des ID aléatoires jusqu'à trouver une ligne valide est une solution efficace, mais peut rencontrer des problèmes avec de grandes lacunes dans les données.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal