2011-06-15 2 views
0

-je créer un ordre par index sur une tablecréer l'index fonctionnel avec un ordre par clause dans oracle

Student (
    roll_No, 
    name, 
    stream, 
    percentage, 
    class_rank, 
    overall_rank ) 

Je souhaite interroger quelque chose comme

SELECT * 
    FROM student 
WHERE stream = 'science' 

Le résultat attendu serait la les étudiants classés par ordre décroissant de leur rang. Une exigence est que je ne peux pas spécifier order by clause dans la requête elle-même.

Ceci devrait être réalisé par un index sur (flux, ordre par class_rank desc). Est-ce réalisable en oracle?

+6

La seule façon de garantir l'ordre des ensembles de résultats est d'utiliser une clause ORDER BY; un index permet d'accélérer la récupération des données lorsque cela est possible. –

+1

Donc, cela semble être un exercice de devoirs mis en place par un tuteur qui ne sait pas de quoi ils parlent. Bonne chance avec ça! –

Répondre

4

Si vous ne spécifiez pas de clause ORDER BY, Oracle ne garantit pas l'ordre dans lequel les lignes sont renvoyées. L'exigence n'a pas de sens.

Vous pourriez avoir de la chance et trouver qu'Oracle choisit un plan de requête qui arrive à retourner les lignes dans l'ordre souhaité. Mais ce serait une question de chance - Oracle pourrait choisir un plan de requête différent demain ou une mise à niveau de version Oracle pourrait créer des résultats à changer. Par exemple, les personnes qui se sont appuyées pendant des années sur la clause GROUP BY ordonnant les résultats en tant qu'effets secondaires ont été perturbées lorsqu'une nouvelle version d'Oracle a ajouté un algorithme de regroupement plus efficace qui n'a pas eu l'effet secondaire de classer les résultats.

0

Je l'ai travail

CREATE INDEX stream_rank_idx ON Student (stream,class_rank desc); 

donc chaque fois que je tire un select * d'étudiant où stream =? interroger l'index ci-dessus sera utilisé et il me retournera le résultat souhaité.

et je pense que c'est presque toujours sûr si je ne suis pas en train de mettre à jour Oracle. et même après la mise à jour il y a une très faible probabilité que l'oracle change la façon dont les index sont choisis.

+2

Ou jusqu'à ce que vous utilisiez cette table de manière à ce qu'Oracle décide d'effectuer une analyse de table complète au lieu d'utiliser l'index. Cela semble juste une façon artificielle de faire quelque chose d'une manière très peu fiable. – eaolson

Questions connexes