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?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Patrick Mevzek
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 <http://www.dotandco.net/> <http://www.dotandco.com/> <http://www.dotandco.net/ressources/icann_registrars/prices> <http://icann-registrars-life.dotandco.net/>
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
<http://www.dotandco.net/> <http://www.dotandco.com/>
<http://www.dotandco.net/ressources/icann_registrars/prices>
<http://icann-registrars-life.dotandco.net/>
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 <http://www.dotandco.net/> <http://www.dotandco.com/> <http://www.dotandco.net/ressources/icann_registrars/prices> <http://icann-registrars-life.dotandco.net/>
Kevin Denis
Le 04-02-2010, Patrick Mevzek 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).
Certes. Donc quelle est la meilleure méthode pour récupérer les 50 derniers enregistrements? -- Kevin
Le 04-02-2010, Patrick Mevzek <pm-N201001@nospam.dotandco.com> 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).
Certes. Donc quelle est la meilleure méthode pour récupérer les
50 derniers enregistrements?
--
Kevin
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 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 <http://www.dotandco.net/> <http://www.dotandco.com/> <http://www.dotandco.net/ressources/icann_registrars/prices> <http://icann-registrars-life.dotandco.net/>
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
<http://www.dotandco.net/> <http://www.dotandco.com/>
<http://www.dotandco.net/ressources/icann_registrars/prices>
<http://icann-registrars-life.dotandco.net/>
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 <http://www.dotandco.net/> <http://www.dotandco.com/> <http://www.dotandco.net/ressources/icann_registrars/prices> <http://icann-registrars-life.dotandco.net/>
Kevin Denis
Le 04-02-2010, Patrick Mevzek 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 ?
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
Le 04-02-2010, Patrick Mevzek <pm-N201001@nospam.dotandco.com> 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 ?
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.
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 05/02/2010 10:03, Kevin Denis a écrit :
Le 04-02-2010, Patrick Mevzek 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 ?
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
Le 05/02/2010 10:03, Kevin Denis a écrit :
Le 04-02-2010, Patrick Mevzek <pm-N201001@nospam.dotandco.com> 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 ?
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 )
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
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
dans (in) fr.comp.applications.sgbd, Kevin Denis <kevin@nowhere.invalid>
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".