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 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 18:04:291027parcourir

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

Comprendre le mécanisme ORDER BY RAND() de MySQL

Dans la poursuite de l'optimisation de la sélection aléatoire dans MySQL, il est essentiel de comprendre le fonctionnement interne de la fonction ORDER BY RAND(). Contrairement aux idées fausses courantes, MySQL n'introduit pas de colonne aléatoire dans la table et ne trie pas en fonction de celle-ci.

Approches alternatives pour une sélection aléatoire rapide

La solution de Jay, qui implique rejoindre une sous-requête, reste l'approche la plus rapide, surpassant considérablement les requêtes ORDER BY RAND() traditionnelles.

Variation inattendue des temps d'exécution

Cependant, une observation particulière se pose lorsque l'on compare temps d'exécution pour différentes combinaisons de colonnes dans les requêtes ORDER BY RAND() :

  • SELECT * FROM table ORDER BY RAND() LIMIT 1 : Slow
  • SELECT id FROM table ORDER BY RAND( ) LIMITE 1 : Rapide
  • SELECT id, username FROM table ORDER BY RAND() LIMITE 1 : Très lent

Comprendre l'écart

Cet écart peut être attribué à l'indexation et à la récupération des données. Les colonnes comme id sont généralement indexées, ce qui rend leur accès plus rapide. En revanche, des colonnes supplémentaires telles que le nom d'utilisateur introduisent des frais généraux lors de la récupération et du traitement des données non indexées.

Optimisation des performances

Pour la sélection aléatoire sur une seule ligne, la solution de Jay reste la choix préféré. Cependant, si plusieurs lignes aléatoires sont nécessaires, une approche basée sur une procédure, comme celle suggérée par un blogueur allemand, peut fournir une alternative plus efficace.

Bien qu'il n'existe pas de ORDER BY RAND vraiment « rapide » ) le fonctionnement dans MySQL, comprendre ses nuances et explorer des approches alternatives peut améliorer considérablement les performances dans les scénarios nécessitant une récupération de données aléatoire.

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!

Déclaration:
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