Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment ordonner les résultats d'une requête de manière aléatoire et sélectionner des lignes aléatoires. (MySQL)

Si cela ne vous dérange pas de sacrifier la complexité des opérations d'insertion/mise à jour/suppression pour la vitesse de sélection, vous pouvez toujours ajouter un numéro de séquence et vous assurer qu'il est conservé lors de l'insertion/mise à jour/suppression, puis chaque fois que vous effectuez une sélection, sélectionnez simplement sur un ou plusieurs nombres aléatoires dans cette plage. Si la colonne "séquence" est indexée, je pense que c'est à peu près aussi rapide que possible.

Une alternative est le "mélange". Ajoutez une colonne de séquence, insérez des valeurs aléatoires dans cette colonne et chaque fois que vous sélectionnez des enregistrements, triez par colonne de séquence et mettez à jour les séquences d'enregistrements sélectionnées avec de nouvelles valeurs aléatoires. La mise à jour ne devrait affecter que les enregistrements que vous avez récupérés, elle ne devrait donc pas être trop coûteuse... mais cela peut valoir la peine d'effectuer des tests sur votre jeu de données.

C'est peut-être une chose assez diabolique à dire, mais je le dirai quand même ... est-il jamais nécessaire d'afficher des données "aléatoires" ? si vous essayez d'afficher des enregistrements aléatoires, vous faites peut-être quelque chose de mal.

Pensez à Amazon... affichent-ils des produits aléatoires, ou affichent-ils des produits populaires, et "des choses que d'autres personnes ont achetées en regardant cela". SO vous donne-t-il une liste de questions aléatoires à droite d'ici, ou une liste de questions liées ? Juste quelques pistes de réflexion.