Explorez des alternatives pour obtenir plusieurs résultats aléatoires
Bien que la fonction ORDER BY RAND() de MySQL fournisse une méthode pour obtenir directement des résultats aléatoires, elle est incapable de sélectionner efficacement plusieurs lignes de données aléatoires. Cet article explore des techniques alternatives pour optimiser ces requêtes.
Solution d'optimisation : utilisation de colonnes d'index et de sous-requêtes
Pour les requêtes recherchant des résultats aléatoires, l’optimisation des performances est essentielle. Une approche innovante qui fonctionne bien consiste à utiliser une combinaison de colonnes indexées et de sous-requêtes. Cette technique réduit considérablement les frais de traitement en isolant le processus de randomisation dans des conditions spécifiques.
Étapes :
Exemple :
Considérez la requête suivante :
<code class="language-sql">SELECT u.id, p.photo FROM users u, profiles p WHERE p.memberid = u.id AND p.photo != '' AND (u.ownership=1 OR u.stamp=1) ORDER BY RAND() LIMIT 18 </code>
Requête optimisée :
<code class="language-sql">SELECT g.* FROM table g JOIN (SELECT id FROM table WHERE RAND() < (SELECT ((4 / COUNT(*)) * 10) FROM table) ORDER BY RAND() LIMIT 4) AS z ON z.id= g.id</code>
Avantages :
Remarque :
Cette méthode d'optimisation repose sur la cohérence entre la sous-requête et la requête principale pour garantir qu'elles renvoient des résultats précis. De plus, choisir des limites raisonnables pour le pourcentage de résultats randomisés peut aider à maintenir les performances.
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!