[MySQL]optimisation requete

optimisation requete [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 13-12-2002 à 21:26:13    

salut ...
je veux faire un requete Mysql ... qui selectionne le tuple avec la date la
plus recente ...
... mysql ne permet pas les requetes imbriquées ... et je sais pas comment
faire ....;-(.... c'est malheureux ....
 
la seule parade que j'ai trouvé .. c'est deux requetes .. la 1ere pour
selectionner la date max .. et la deuxieme pour le tuple avec le resultat de
la premiere ...
 
 
$requete1="select  MAX(newsletter_date_post) MAX_DATE  from ".$table4;
 
$dated=mysql_query($requete_inter,$lien);
while($data_inter=mysql_fetch_object($dated)) $datef=$data_inter->MAX_DATE;
 
$requete2= "SELECT N.newsletter_title, N.newsletter_text,
DATE_FORMAT(N.newsletter_date_post,'%d/%m/%Y %T' ) AS DATEF, ".
    " N.newsletter_id NO, U.pseudo as PS, U.email as MAIL ".
      "from ".$table4." N ";
  $requete2.= "WHERE N.newsletter_date_post='$datef';";
 
merci a vous ...pour l'optimisation ..


Message édité par simogeo le 13-12-2002 à 21:27:19
Reply

Marsh Posté le 13-12-2002 à 21:26:13   

Reply

Marsh Posté le 13-12-2002 à 21:32:48    

Faut pas chercher la date la plus grande, mais récupérer le première ligne avec un tri sur la date par ordre décroissant : ;)  
 
SELECT N.* FROM N ORDER BY newsletter_date_post DESC LIMIT 0,1

Reply

Marsh Posté le 13-12-2002 à 21:36:54    

sauf que tu recuperes tout ...  
et si tu as 30 000 enregistrements dans ta table c'est pareil ...
tout ca pour un tuple .......c'est pas franchement de l'optimisation .... ;)
 
merci quand même


Message édité par simogeo le 13-12-2002 à 21:37:16
Reply

Marsh Posté le 13-12-2002 à 21:41:55    

simogeo a écrit :

sauf que tu recuperes tout ...  
et si tu as 30 000 enregistrements dans ta table c'est pareil ...
tout ca pour un tuple .......c'est pas franchement de l'optimisation .... ;)
 
merci quand même

:non:  
J'ai mis un LIMIT 0, 1 à la fin, il ne renvoie qu'un seul enregistrement.
Bien sur, il devra parcourir toute la table pour comparer les dates (à moins que tu n'ai un index dessus). Mais je pense pas qu'il existe une solution miracle pour qu'il trouve la dernière date sans toutes les comparer [:proy]

Reply

Marsh Posté le 13-12-2002 à 21:48:30    

mrbebert a écrit :

:non:  
J'ai mis un LIMIT 0, 1 à la fin, il ne renvoie qu'un seul enregistrement.
Bien sur, il devra parcourir toute la table pour comparer les dates (à moins que tu n'ai un index dessus). Mais je pense pas qu'il existe une solution miracle pour qu'il trouve la dernière date sans toutes les comparer [:proy]  


 
euhhh .... :non:  c'est moi qui dis NON ... le LIMIT 0,1 ne sert que pour l'affichage ... il me semble !!!!

Reply

Marsh Posté le 13-12-2002 à 22:40:57    

simogeo a écrit :


 
euhhh .... :non:  c'est moi qui dis NON ... le LIMIT 0,1 ne sert que pour l'affichage ... il me semble !!!!

:non: pour la selection

Reply

Marsh Posté le 13-12-2002 à 22:41:32    

pour l'affichage tu fait un for ($i=0; $i=x; $i++)


Message édité par Profil supprimé le 13-12-2002 à 22:41:39
Reply

Marsh Posté le 13-12-2002 à 22:56:53    

chacal_one333 a écrit :

pour l'affichage tu fait un for ($i=0; $i=x; $i++)


 
ouais t'es gentil ... pour l'affichage ...  :pt1cable:
 
pour le LIMIT tu me fais douter .... :??:


Message édité par simogeo le 13-12-2002 à 22:58:00
Reply

Marsh Posté le 13-12-2002 à 22:58:03    

hein?
 :heink:

Reply

Marsh Posté le 13-12-2002 à 22:58:25    

edit grillaid [:ddr555]

Reply

Marsh Posté le 13-12-2002 à 22:58:25   

Reply

Marsh Posté le 13-12-2002 à 23:01:22    


 
????... il ne s'agit pas d'avoir raison ... mais de faire la lumière ...

Reply

Marsh Posté le 13-12-2002 à 23:03:18    

edit grillaid ca veut dire que jtai vu que ta editer ton msg ;)

Reply

Marsh Posté le 13-12-2002 à 23:03:47    

simogeo a écrit :


 
????... il ne s'agit pas d'avoir raison ... mais de faire la lumière ...

:jap: m'enfin je suis preske sur
 
a99% dirons nous mais jpeu avoir tord :)

Reply

Marsh Posté le 13-12-2002 à 23:08:56    

Voila l'extrait de mon gros livre sur le php
 

Citation :

la clause LIMIT peut etre placé à la fin de toute requete sql, et indique le nombre maximal de lignes dans le resultat


 
Donc le limit limit bien la selection [:spamafote]


Message édité par Profil supprimé le 13-12-2002 à 23:09:12
Reply

Marsh Posté le 13-12-2002 à 23:13:54    

chacal_one333 a écrit :

Voila l'extrait de mon gros livre sur le php
 

Citation :

la clause LIMIT peut etre placé à la fin de toute requete sql, et indique le nombre maximal de lignes dans le resultat


 
Donc le limit limit bien la selection [:spamafote]


 
oui .. dans le resultat ... mais pas dans la requete .... me semble-t'il ...  
par exemple : si tu fais un LIMIT 0,3 tu obtiens bien tes 3 enregistrements mais la requete porte sur l'ensemble de la table ... tu vois ce que je veux dire ou pas ?

Reply

Marsh Posté le 13-12-2002 à 23:19:55    

pour finir la doc nexen .....
si ca t'interesse
 
 
10.7 Comment MySQL optimise les LIMIT
Dans certains cas, MySQL va traiter la requête de manière très différente suivant que vous utilisez LIMIT # et non pas HAVING:  
 
Si vous ne faites que selectionner que quelques lignes avec LIMIT, MySQL utilisera des index, alors qu'il préfère généralement une recherche exhaustive dans la table.  
Si vous utiliser LIMIT # avec ORDER BY, MySQL arrêtera le tri dès qu'il a trouver un nombre suffisant de colonnes, et non pas après avoir scanné la table complète.  
Lors de la combinaison de LIMIT # et DISTINCT, MySQL s'arrête dès qu'il a trouvé # lignes uniques.  
Dès que MySQL a envoyé les premières # au client, il termine la requête.  
 
merci pour le débat passionné  :D  
 :jap:  :hello:

Reply

Marsh Posté le 13-12-2002 à 23:35:02    

:wahoo:  :hello:

Reply

Marsh Posté le 16-12-2002 à 18:33:23    

mrbebert a écrit :

Faut pas chercher la date la plus grande, mais récupérer le première ligne avec un tri sur la date par ordre décroissant : ;)  
 
SELECT N.* FROM N ORDER BY newsletter_date_post DESC LIMIT 0,1


ca depend, perso je prefere faire ca en deux query en choppant le max car c optimise par mysql toute version et donc t'as des perfs max.

Reply

Marsh Posté le 16-12-2002 à 18:34:12    

simogeo a écrit :


 
euhhh .... :non:  c'est moi qui dis NON ... le LIMIT 0,1 ne sert que pour l'affichage ... il me semble !!!!

bien sur que non, MySQL arrete de fetcher des qu'il a trouve une ligne

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed