Obtenir les derniers enregistrements MYSQL

Le
Kevin Denis
Bonjour,

j'utilise une base mySQL en version 3.

J'ai besoin de récupérer les 'x' derniers enregistrements (x variant
entre 10 et 500, mettons).

Ma table peut contenir selon les moments entre quelques lignes (voir vide)
ou plusieurs millions de lignes.

J'utilise une requête:
select * from ma_table where colonne=id limit 50

Est ce la bonne manière de faire? En fait, la question porte plus
sur la pertinence de ce mode de fonctionnement lorsque la table
fait plusieurs millions de lignes. La commande traite la
table entière et tronque aux 50 dernières, ou bien part de la fin et
remonte jusqu'a obtenir 50 enregistrements?

Merci
--
Kevin
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrick Mevzek
Le #21924641
Le Thu, 04 Feb 2010 14:23:01 +0000, Kevin Denis a écrit:
J'utilise une requête:
select * from ma_table where colonne=id limit 50



De manière générique, sans ordre (ORDER BY), cette requête retourne en
gros 50 enregistrements "au hasard" (parmi ceux respectant colonne=id
évidemment).

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
Kevin Denis
Le #21924631
Le 04-02-2010, Patrick Mevzek
J'utilise une requête:
select * from ma_table where colonne=id limit 50



De manière générique, sans ordre (ORDER BY), cette requête retourne en
gros 50 enregistrements "au hasard" (parmi ceux respectant colonne=id
évidemment).



Certes. Donc quelle est la meilleure méthode pour récupérer les
50 derniers enregistrements?
--
Kevin
Patrick Mevzek
Le #21924621
Le Thu, 04 Feb 2010 15:39:08 +0000, Kevin Denis a écrit:
De manière générique, sans ordre (ORDER BY), cette requête retourne en
gros 50 enregistrements "au hasard" (parmi ceux respectant colonne=id
évidemment).



Certes. Donc quelle est la meilleure méthode pour récupérer les 50
derniers enregistrements?



Commencer par définir "derniers" !
Cela implique un ordre, forcément, donc vous ordonnez sur quel critère ?

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
Kevin Denis
Le #21924611
Le 04-02-2010, Patrick Mevzek
De manière générique, sans ordre (ORDER BY), cette requête retourne en
gros 50 enregistrements "au hasard" (parmi ceux respectant colonne=id
évidemment).



Certes. Donc quelle est la meilleure méthode pour récupérer les 50
derniers enregistrements?



Commencer par définir "derniers" !
Cela implique un ordre, forcément, donc vous ordonnez sur quel critère ?



Le temps. C'est une table qui enregistre des données de façon monotone.
A chaque fois, c'est un INSERT qui vient se mettre sous la ligne précédente.
Ceci ressemble donc à:
id heure valeur donnée
1 10 3 aaa
2 10 5 bbb
3 10 6 aaa
4 11 3 aaa
etc...
J'ai donc, dans ma requête, besoin de récupérer les 50 dernieres lignes
lorsque valeur=3.

Merci
--
Kevin
Sebastien Lardiere
Le #21924601
Le 05/02/2010 10:03, Kevin Denis a écrit :
Le 04-02-2010, Patrick Mevzek
De manière générique, sans ordre (ORDER BY), cette requête retourne en
gros 50 enregistrements "au hasard" (parmi ceux respectant colonne=id
évidemment).



Certes. Donc quelle est la meilleure méthode pour récupérer les 50
derniers enregistrements?



Commencer par définir "derniers" !
Cela implique un ordre, forcément, donc vous ordonnez sur quel critère ?



Le temps. C'est une table qui enregistre des données de façon monotone.
A chaque fois, c'est un INSERT qui vient se mettre sous la ligne précédente.
Ceci ressemble donc à:
id heure valeur donnée
1 10 3 aaa
2 10 5 bbb
3 10 6 aaa
4 11 3 aaa
etc...
J'ai donc, dans ma requête, besoin de récupérer les 50 dernieres lignes
lorsque valeur=3.



Il faut donc ajouter dans la table une colonne de type datetime prenant
pour valeur le moment de l'insertion ( default now() ) , puis, lors du
select, trié selon cette colonne ( order by ) , et limité à 50 tuples (
limit 50 )

--
Sébastien
Eric Demeester
Le #21924591
dans (in) fr.comp.applications.sgbd, Kevin Denis ecrivait (wrote) :

Bonjour,

id heure valeur donnée
1 10 3 aaa
2 10 5 bbb
3 10 6 aaa
4 11 3 aaa
J'ai donc, dans ma requête, besoin de récupérer les 50 dernieres lignes
lorsque valeur=3.



SELECT * FROM Ma_table WHERE valeur='3' ORDER BY id DESC LIMIT 50;

devrait faire l'affaire si on suppose qu'id s'auto-incrémente. Ajouter
un timestamp comme suggéré par Sébastien serait néanmoins plus propre.

Dans ce cas, on aurait "ORDER BY champ_timestamp DESC".

--
Eric
Publicité
Poster une réponse
Anonyme