IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Equivalent SQL_CALC_FOUND_ROWS oracle


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    Par défaut Equivalent SQL_CALC_FOUND_ROWS oracle
    Bonjour,

    Question simple mais malgres mes recherche je ne trouve pas.
    Contexte : Reprise d'un site intranet PHP / oracle
    J'ai une requete qui retourne on va dire 5000 élements, hors il n'y en a que 20 qui sont affiché a chaque fois.
    Voyant cela je change donc la requete en y injectant un rownum et en l'imbriquant avec une autre pouvoir faire une rownum between

    principe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT rownum, a, b, c
    FROM 
    (
      SELECT rownum, a, b, c
      FROM d, e, f
      WHERE d.idx = e.idx
                AND e.idx2 = f.idx
          ORDER BY d.champ
    ) WHERE ROWNUM BETWEEN 0 AND 20
    Bref tout marche donc correctement mais je dois aussi faire le page par page, qui lui devient problématique car il était fait sur le nombre de résultat renvoyé par oracle.

    J'ai donc chercher un equivalent a SQL_CALC_FOUND_ROWS et ROW_FOUND() mais malheureusement cela ne semble exister a part CARD dans les statistique et je ne peux meme pas les recup en PHP.

    Le probleme est surtout sur le temps d'execution.
    La requete initiale prenait 9 sec, la version optimise un peu moins, si je rajoute une requete pour faire le count(*) de 7sec je rallonge mon temps d'execution => pas interressant.

    Donc la question : Est-ce qu'il existe une solution permettant de retourner les elements ainsi que le nombre total a la maniere d'un SQL_CALC_FOUND_ROWS de mysql?

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Pour la pagination la requête optimale est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    select
            {list of columns}
    from    (
            select  {list of columns}, rownum rn
            from
                    ( {your select statement with order by} )
            where
                    rownum <= N * {your pagesize}
            )       v1
    where
            v1.rn > (N-1) * {your pagesize}
    order by
            rn
    (Jonathan Lewis)
    Il n'est pas possible d'avoir le nombre total des enregistrements sans payer ,en terme de temps de réponse, pour ça! Donc a tu besoin réellement de savoir qu'il y a 423656 lignes au total ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    Par défaut
    Malheureusement oui, je suis obligé de reproduire l'existant en plus des nouvelles fonctionnalitées.
    Je dois absolument faire les limit car sur certaines requetes, php consomme toute la memoire.

    Existe-t-il sous oracle des tables temporaire comme sous DB2 (prefixe par #)?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    Par défaut
    Je ferme le sujet merci pour la réponse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Equivalent NVL(Oracle) sous ACCESS
    Par chouchouilloux dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 23/02/2011, 20h50
  2. Equivalent Sequence Oracle en SQLServer
    Par Gabbe_pro dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 25/02/2010, 21h32
  3. Equivalence found_rows Oracle 10g
    Par shadeoner dans le forum SQL
    Réponses: 13
    Dernier message: 25/09/2008, 14h20
  4. Equivalence entre Oracle et Sql Server
    Par sfaxi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/01/2007, 09h27
  5. Equivalent sous Oracle d une option SQLServer
    Par Pasiphae dans le forum Oracle
    Réponses: 3
    Dernier message: 19/11/2004, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo