Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Pages : 1