Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3052 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL]optimisation requete

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL]optimisation requete

n°269352
simogeo
j'ai jamais tué de chats, ...
Posté le 13-12-2002 à 21:26:13  profilanswer
 

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
mood
Publicité
Posté le 13-12-2002 à 21:26:13  profilanswer
 

n°269355
mrbebert
Posté le 13-12-2002 à 21:32:48  profilanswer
 

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

n°269359
simogeo
j'ai jamais tué de chats, ...
Posté le 13-12-2002 à 21:36:54  profilanswer
 

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
n°269361
mrbebert
Posté le 13-12-2002 à 21:41:55  profilanswer
 

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]

n°269364
simogeo
j'ai jamais tué de chats, ...
Posté le 13-12-2002 à 21:48:30  profilanswer
 

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

n°269399
Profil sup​primé
Posté le 13-12-2002 à 22:40:57  answer
 

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

n°269400
Profil sup​primé
Posté le 13-12-2002 à 22:41:32  answer
 

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


Message édité par Profil supprimé le 13-12-2002 à 22:41:39
n°269415
simogeo
j'ai jamais tué de chats, ...
Posté le 13-12-2002 à 22:56:53  profilanswer
 

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
n°269416
Profil sup​primé
Posté le 13-12-2002 à 22:58:03  answer
 

hein?
 :heink:

n°269417
Profil sup​primé
Posté le 13-12-2002 à 22:58:25  answer
 

edit grillaid [:ddr555]

mood
Publicité
Posté le 13-12-2002 à 22:58:25  profilanswer
 

n°269421
simogeo
j'ai jamais tué de chats, ...
Posté le 13-12-2002 à 23:01:22  profilanswer
 


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

n°269423
Profil sup​primé
Posté le 13-12-2002 à 23:03:18  answer
 

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

n°269424
Profil sup​primé
Posté le 13-12-2002 à 23:03:47  answer
 

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 :)

n°269430
Profil sup​primé
Posté le 13-12-2002 à 23:08:56  answer
 

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
n°269443
simogeo
j'ai jamais tué de chats, ...
Posté le 13-12-2002 à 23:13:54  profilanswer
 

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 ?

n°269450
simogeo
j'ai jamais tué de chats, ...
Posté le 13-12-2002 à 23:19:55  profilanswer
 

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:

n°269460
Profil sup​primé
Posté le 13-12-2002 à 23:35:02  answer
 

:wahoo:  :hello:

n°270883
joce
Architecte / Développeur principal
"BugHunter"
Posté le 16-12-2002 à 18:33:23  profilanswer
 

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.

n°270884
joce
Architecte / Développeur principal
"BugHunter"
Posté le 16-12-2002 à 18:34:12  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL]optimisation requete

 

Sujets relatifs
[MySQL] Création de comptes utilisateurRequête SQL sur controle ADO - Problème
MS SQL Server 2000 et Mysql[MySQL] Dans ce forum , Joce a crée...
probleme d'affichage lors d'1 requete SQLRequête action sous Access 2002
conseil ecriture commande mysqlRequête SQL en danger...
[PHP/MySQL] question sur la recuperation de champs[MYSQL PHP] Requete ne renvoyant qu'1 champ, optimisation du code.
Plus de sujets relatifs à : [MySQL]optimisation requete


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR