OVH Community, votre nouvel espace communautaire.

Order by rand() , mysql


mcferson
17/02/2016, 14h55
Ok merci à tous les deux pour vos informations.

lGuillaume124
17/02/2016, 10h23
J'ai vérifié sur le serveur qui héberge votre base de données, et il arrive en effet que nos robots coupent certaines de vos requêtes.

Cordialement,

DJiK
16/02/2016, 17h14
Citation Envoyé par mcferson
J'utilise déjà un truc du genre
Oui, c'est beaucoup mieux.

- Je ne pense pas qu'il y ait plus optimisé.
- Par mettre en cache je pense au cache de requêtes de MySQL. Oui, c'est automatique.
- Mais ça ne stocke pas dès qu'il y a RAND(), avec un n° fixe oui, et si par hasard tu demande le même nombre avant qu'il soit sorti du cache ce sera encore plus rapide.
- Ce que tu as fait est très bien pour se passer de RAND() non?
- Ce n'est pas parce qu'une fonction existe que c'est l'idéal de l'utiliser.

mcferson
16/02/2016, 16h56
Citation Envoyé par lGuillaume124
Bonjour mcferson,

Sur les serveurs MySQL, vous êtes limité à 30 connexions simultanées max, mais je ne pense pas que cela vous affecte. En revanche, comme son nom l'indique vous êtes sur du mutualisé et donc pas seul sur le serveur qui accueille votre base de données. Ainsi, vos requêtes peuvent être stoppées si leur temps d'exécution est trop long, ou si l'activité de votre base de données consomme trop de ressources système (pouvant générer des instabilités sur le serveur).

Étant donné la lourdeur potentielle de traitement des requêtes que vous détaillez ci-dessus, il est possible que vous soyez dans ce cas. Auriez-vous un nom de domaine ou un nom de base de données à me fournir pour que je vérifie ?

Cordialement,
La base en question : motsnombpro.mysql.db


Citation Envoyé par DJiK
De "rows"???
Vaut mieux faire le hasard en PHP qu'en SQL, ce sera 1 millions de fois plus rapide, mettable en cache, et déchargera la BDD.
J'utilise déjà un truc du genre

Code:
$n=mt_rand(1,13196700);
$row=$db->prepare("SELECT *  FROM newcompte_bak WHERE id='$n'");
Et effectivement ça me sort une ligne très vite mais n'étant pas un pro y'a plein de trucs qui m’échappent :
  • Y'a t-il plus optimisé ?
  • Qu'entends-tu par mettre en cache ? Quelle est la marche à suivre pour mettre en cache ou ça se met en cache automatiquement ?
  • Les requêtes SQL sont pas mises en cache déjà ?
  • Je vois pas trop comment me passer de RAND() à moins de scinder ma table chose que j'ai dèjà fait pour certaines requêtes. Y'a un autre moyen ?
  • Si RAND() existe et est accessible c'est qu'il doit bien servir ou alors effectivement si trop de requêtes qu'on sache si c'est le cas

DJiK
16/02/2016, 16h33
De "rows"???
Vaut mieux faire le hasard en PHP qu'en SQL, ce sera 1 millions de fois plus rapide, mettable en cache, et déchargera la BDD.

lGuillaume124
16/02/2016, 15h34
Bonjour mcferson,

Sur les serveurs MySQL, vous êtes limité à 30 connexions simultanées max, mais je ne pense pas que cela vous affecte. En revanche, comme son nom l'indique vous êtes sur du mutualisé et donc pas seul sur le serveur qui accueille votre base de données. Ainsi, vos requêtes peuvent être stoppées si leur temps d'exécution est trop long, ou si l'activité de votre base de données consomme trop de ressources système (pouvant générer des instabilités sur le serveur).

Étant donné la lourdeur potentielle de traitement des requêtes que vous détaillez ci-dessus, il est possible que vous soyez dans ce cas. Auriez-vous un nom de domaine ou un nom de base de données à me fournir pour que je vérifie ?

Cordialement,

mcferson
16/02/2016, 15h12
Hello,

Soucis avec ORDER BY RAND() sur un hébergement pro mutualisé

Cette requête me renvoie environ 1 million de rows et fonctionne
Code:
$row=$db->prepare("SELECT * FROM newcompte_bak WHERE maxDiff!='0' ORDER BY RAND() LIMIT 1 ");
Cette requête devrait me renvoyer environ 10 millions de rows et ne fonctionne pas
Code:
$row=$db->prepare("SELECT * FROM newcompte_bak WHERE maxDiff='0' ORDER BY RAND() LIMIT 1 ");
En local avec wamp ça roule.

QUESTION : y'a t-il des limitations et surtout quelles sont-elles ? Où puis-je trouver ces limitations ?

Merci par avance