Aller au contenu

tirage aléatoire et optimisation mysql


suede

Sujets conseillés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



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