|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Invité de passage
![]() Inscription : février 2004 Messages : 5 ![]() |
Bonjour,
J'ai un problème que je ne 'arrive pas à résoudre. Sur Oracle 9.2.0.1.0, j'ai une table comme suit : Code :
Lorsque je passe la requete suivante : Code :
SELECT id_definition_carte, id_type_carte, libelle FROM definition_carte WHERE id_type_carte = 2; Code :
Je pensais que les clef primaire était triée automatiquement ? Voilà les paramètres du serveur : Code :
Code :
Il semble de plus que les nouveaux enregistrements soient ajoutés en haut et non en bas comme attendu. Merci de votre aide... |
||||||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Philippe CHIRCOPChef de projet Inscription : juin 2007 Messages : 1 109 ![]() |
je n'ai jamais entendu dire que les enregistrements étaient triés sur la PK !
Faire un order by dans la requête. Mais ou est le pb ?? |
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Inscription : février 2004 Messages : 5 ![]() |
Citation:
Sous Oracle, j'ai toujours vu le dernier enregistrement se mettre à la fin dans mes SELECT. Avec une PK, il me semble qu'il y a un index qui se crée automatiquement, ce qui fait que c'était trié automatiquement aussi. |
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Philippe CHIRCOPChef de projet Inscription : juin 2007 Messages : 1 109 ![]() |
Jamais entendu parler de ca.
Quand bien même, je me repête, OU est le problème. |
|
|
00
|
|
|
#5 | |
|
Invité de passage
![]() Inscription : février 2004 Messages : 5 ![]() |
Citation:
Je n'ai pas la main sur le programme pour forcer le tri. Du coup, ce programme fonctionne très bien sur plusieurs bases, mais pose problème sur de nouvelle base. J'ai l'impression qu'un paramètre a été modifiée dans la base depuis, mais je ne vois pas lequel (je ne suis pas DBA en plus). |
|
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
L'ordre d'affichage sans ORDER BY n'a jamais été celui de la pk.
C'est toujours dans l'ordre que l'Optimiseur choisit. (L'ordre dans lequel les lignes sont lues) Si la table n'est pas accédée par l'index de la PK, il n'y a aucune raison qu'il trie tout seul les données dans l'ordre de la PK (et heureusement, sinon ça boufferait de la mémoire et de l'IO pour du tri non voulu). Imagine : Tu fais un Table access Full sur une table Si tu devais trier les données dans l'ordre de la PK, il faudrait aller lire en plus l'index de la PK, puis les trier en mémoire Pour nous : Ce qui s'est passé lorsque ma boite a changé les bases en mode CHOOSE (ils étaient en Choose sans stat : Equivalent au mode RULE). Habitués à faire des SELECT sur des petites tables avec le début de la pk sans tri. ex Code :
SELECT pk1, pk2, col3 FROM MATABLE WHERE pk1 = 'SOCIETE1' Quand on est passé en CHOOSE : optimiseur : Pas besoin de lire l'index de la PK => Table access full => "Tri" dans l'ordre de lecture = Tri différent
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#7 | |
|
Invité de passage
![]() Inscription : février 2004 Messages : 5 ![]() |
Citation:
Pour ce qui est du mode CHOOSE ou RULE, je vais regarder sur la base comment c'est mis. Je cherche comment on peut trouver ça, et je reviens |
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Philippe CHIRCOPChef de projet Inscription : juin 2007 Messages : 1 109 ![]() |
Est ce que tu as changé de version (8.1=>9) ?
Ne serais-ce pas du au fait qu'il n'ya plus d'optimisation 'RULES' en 9 ? |
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 450 ![]() |
Mode de la base :
Code :
Mais s'il n'y a pas de stats pour les tables de la requete, Oracle utilise alors le mode RULE pour la requete.
__________________
More Code : More Bugs. Less Code : Less Bugs |
||
|
|
00
|
|
|
#10 | |||
|
Invité de passage
![]() Inscription : février 2004 Messages : 5 ![]() |
Citation:
Effectivement, le serveur est en mode CHOOSE. Je vais demandé à ce qu'on fasse un test en mode RULE. Et puis remonter l'info au développement pour faire des tri sur les PK. |
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com