optimisation requete [MySQL] - SQL/NoSQL - Programmation
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
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
Marsh Posté le 13-12-2002 à 21:41:55
simogeo a écrit : sauf que tu recuperes tout ... |
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
Marsh Posté le 13-12-2002 à 21:48:30
mrbebert a écrit : |
euhhh .... c'est moi qui dis NON ... le LIMIT 0,1 ne sert que pour l'affichage ... il me semble !!!!
Marsh Posté le 13-12-2002 à 22:40:57
simogeo a écrit : |
pour la selection
Marsh Posté le 13-12-2002 à 22:41:32
pour l'affichage tu fait un for ($i=0; $i=x; $i++)
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 ...
pour le LIMIT tu me fais douter ....
Marsh Posté le 13-12-2002 à 23:01:22
chacal_one333 a écrit : edit grillaid |
????... il ne s'agit pas d'avoir raison ... mais de faire la lumière ...
Marsh Posté le 13-12-2002 à 23:03:18
edit grillaid ca veut dire que jtai vu que ta editer ton msg
Marsh Posté le 13-12-2002 à 23:03:47
simogeo a écrit : |
m'enfin je suis preske sur
a99% dirons nous mais jpeu avoir tord
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
Marsh Posté le 13-12-2002 à 23:13:54
chacal_one333 a écrit : Voila l'extrait de mon gros livre sur le php
|
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 ?
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é
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 : |
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.
Marsh Posté le 16-12-2002 à 18:34:12
simogeo a écrit : |
bien sur que non, MySQL arrete de fetcher des qu'il a trouve une ligne
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