Vous n'êtes pas identifié(e).

#1 11/03/2010 11:49:18

Mekhanik
Membre

Question sur les order by

Bonjour,
Comment fonctionne les order by ?
J'ai fait le test suivant :
J'ai créé une table ordonné avec un start_time par ordre décroissant.
Cette table est non indexée.

Si je prend les 2 premières lignes sans order by j'obtiens le résultat suivant
          Day

------------------------

2010-03-10 15:08:48+01

2010-03-10 15:08:30+01

et si je fait la même requete avec order by
          Day

------------------------

2010-03-10 23:59:59+01

2010-03-10 23:59:59+01

Mon but est de préordonner ma table en fonction de start_time pour suprrimer le order by dans les requetes.
Les temps de réponse avec ou sans sont en effet très différents.

Mais ce n'est peut-être pas possible de cette façon là ...
Je me suis inspiré d'un autre billet qui conseillais de préordonner les tables notamment par la commander cluster order by pour gagner en perf

Hors ligne

#2 11/03/2010 15:45:44

gleu
Administrateur

Re : Question sur les order by

Comment fonctionne les order by ?

Je ne comprends pas vraiment la question. Un ORDER BY se fait soit par un tri en mémoire (ce qui peut se révéler lent si la mémoire que doit utiliser le ORDER BY dépasse la valeur du work_mem (car des écritures disque seront effectuées dans ce cas), soit par l'utilisation de l'index. Dans le cas où la table est ordonnée grâce à CLUSTER, la mémoire demandée pour le tri est bien moindre, d'où de meilleures performances.


Guillaume.

Hors ligne

#3 11/03/2010 15:48:56

Marc Cousin
Membre

Re : Question sur les order by

Mauvaise idée.

Les données dans les bases de données relationnelles n'ont de garantie d'ordre que si l'ordre SQL le précise explicitement. Il n'est de toutes façons même pas garanti avec PostgreSQL qu'il lise les données à partir du début physique de la table (regarder les synchronized scans dans la doc si vous voulez savoir pourquoi).

Ce que vous pouvez faire, c'est réordonner régulièrement votre table par rapport à un de ses index. C'est ce que permet la commande cluster. Mais il faut que vous gardiez l'order by.


Marc.

Hors ligne

Pied de page des forums