Bonjour à tous,
Dans un premier temps, je voudrais savoir si d'autres personnes avaient déjà expérimenté le même problème. Lorsque je souhaite utilisé des Top-N query avec WHERE ROWNUM pour faire de la pagination, je passe de quelques secondes d'utilisation à plusieurs minutes (là ca fait une heure que ca tourne et toujours pas de résultat).
En revanche cela fonctionne très bien si je stocke le rownum dans une première TOP query, et que je filtre en utilisant une autre TOP query.
Pour schématiser :
SELECT * FROM (SELECT * FROM A ORDER BY A.1, A.2, ...);
Environ 4 secondes
SELECT * FROM (SELECT * FROM A ORDER BY A.1, A.2, ...) WHERE ROWNUM <= 1;
Environ ??? secondes?/minutes?/heures?
SELECT * FROM (SELECT B.*, ROWNUM NUM FROM (SELECT * FROM A ORDER BY A.1, A.2, ...) B) WHERE NUM <= 1;
Environ 4 secondes
Quelques informations supplémentaires:
1 2 3 4 5 6 7 8
| select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Release 11.1.0.6.0 - 64bit Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Solaris: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production |
Pour information la requête est en fait d'une complexité moyenne (GROUP BY et MAX) qui elle-même repose sur une vue plus complexe (jointure sur 4 tables avec comptage d'élément qui relie les tables 2 à 2). Je pourrais éventuellement faire une schéma mais ca me prendra un peu de temps ^^
Partager