Aller au contenu

tirage aléatoire et optimisation mysql


Sujets conseillés

Posté

Bonjour

Les requêtes comportant des clauses order by rand etc ne sont pas mise en cache par mysql. En général, il s'agit aussi de requêtes lourdes pour le serveur car toute la table est parcourue.

J'ai une requête du genre

order by md5 qui utilise la clef de la table concaténée avec la date du jour et l'id de la page comme amorçage du rand() afin d'afficher une photo aléatoire différente sur chaque page (mais toujours la même photo un jour donné sur une page donnée).

Cela a le gros inconvénient d'être pas optimal.

Quels sont les alternatives?

Je pensais à un cron chaque matin ou exécution d'un script à la première page vue dans la journée et enregistrement des correspondances pages/photos dans un fichier à inclure, cela pour toute les photos : on fait un tirage aléatoire et ensuite on affecte dans l'ordre à chaque page? Un fichier pour toutes les pages ? Un fichier par page (plus facile à gérer de nouvelles pages) ?

D'autres solutions?

François

Posté

Bonjour,

Je vais peut-être dire une bêtise, mais pourquoi ne pas ouvrir une table simplement sans tri et de choisir l'enregistrement n en aléatoire ?!

Posté

Et en mettant un seed pour initialiser le random, la requête serait-elle mise en cache ?

SELECT * FROM table ORDER BY RAND(CURDATE()) LIMIT 1

Pourrais-tu donner le lien qui parle de la mise en cache ?

Posté

Ici: http://dev.mysql.com/doc/refman/5.0/fr/query-cache-how.html

Si tu as un rand(), pas de cache.

J'ai un seed dans mon rand qui dépend de idphoto (le champs que je recupère), dayofyear().

Le but est de changer chaque jour les photos mises en bas de page mais que pour une page donnée, un jour donné, ce soit toujours la même photo.

Une possibilité aussi est

Aller chercher le nombre d'enregistrement

Choisir en php au hasard avec un seed dépendant de la page (donc constant) une valeur inférieur à l'enregistrement

Faire la requete sql avec cette valeur.

François

Posté
Une possibilité aussi est

Aller chercher le nombre d'enregistrement

Choisir en php au hasard avec un seed dépendant de la page (donc constant) une valeur inférieur à l'enregistrement

Faire la requete sql avec cette valeur.

C'est ce que je disais...

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...