Optimisation de la sélection aléatoire de lignes dans les grandes tables MySQL
Extraire 10 lignes aléatoires d'une table MySQL importante (par exemple, 600 000 lignes) nécessite une stratégie qui donne la priorité à la vitesse et à l'efficacité. L'approche naïve consistant à utiliser ORDER BY RAND()
est notoirement lente pour les grands ensembles de données. Une méthode plus efficace est décrite ci-dessous :
La requête suivante fournit une solution beaucoup plus rapide :
<code class="language-sql">SELECT name FROM random WHERE id >= (SELECT FLOOR(RAND() * MAX(id)) FROM random) ORDER BY id LIMIT 10;</code>
Cette requête fonctionne en déterminant d'abord un point de départ aléatoire dans la plage de la colonne id
à l'aide de FLOOR(RAND() * MAX(id))
. Il sélectionne ensuite les lignes où le id
est supérieur ou égal à ce point de départ aléatoire. Enfin, il classe les résultats par id
et limite la sortie à 10 lignes. Cela évite l'analyse complète de la table inhérente à ORDER BY RAND()
, ce qui entraîne une amélioration substantielle des performances. Cette approche garantit une répartition relativement uniforme des lignes aléatoires dans la table.
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!