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

DB2 Discussion :

Requête SQL : équivalent de Limit?


Sujet :

DB2

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Points : 65
    Points
    65
    Par défaut Requête SQL : équivalent de Limit?
    Bonjour,
    J'accède à ma table via un programme en java, et je fais ma requête sur la table en sql.
    Mon problème est que la table a près de 10M de lignes (..), donc que je ne peux pas la charger en une fois, ni faire une requête type select qui me retournerait toute la table. J'avais donc penser lire la table 100lignes par 100lignes, mais le mot clé LIMIT n'est pas accepté par l'AS400.
    Je fais donc un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FETCH FIRST N ROW ONLY
    pour le moment, mais (logiquement), plus j'avance dans la table, plus c'est long.
    Existe t'il un moyen de faire autrement? Je ne peux pas me permettre de temporiser 10sec pour extraire des infos de la table.
    Merci d'avance,
    Bdloul

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    la question qu'il faut se poser serai plutôt : quel est l'intérêt de ramenet 10M de lignes dans votre applicatif ??

    N'êtes vous pas en train d'essayer de faire un traitement batch ...? En java qui plus est !


    Bref, pour répondre à votre question initiale, lisez cet article (qui doit marcher en V5r4+) : http://g-ernaelsten.developpez.com/tutoriels/dblimit/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    C'est juste une question d'affichage. Je dois afficher le contenu de la table sur une page web, en utilisant les technos J2EE. Je me suis dit que j'allais faire une connexion sur l'as400 ou sont les tables dans mon code modèle et que j'allais afficher le contenu de la table 100lignes par 100lignes. Fin bref ça me semble le plus simple & le truc que tu m'as filé va me permettre de limiter le nombre de ressources utilisées.
    Bref merci.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Sinon regardez du côté de votre driver jdbc, il doit supporter ce genre de chose.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    Je récapitule, puisque je n'ai pas été très explicite la première fois.
    Je fais une interface web entre l'user et une table sur un AS400. La table contient plusieurs M de lignes, mais je voudrais les prendre seulement 100 par 100 (vu que je les affiche que 100 par 100 => bouton next).
    J'ai essayé ce que vous m'avez donné en lien, mais je n'arrive pas à le mettre en place( Error : nombre de colonne incohérente).
    Mais j'ai néanmoins peur que ça me simplifie juste la vie, sans accélérer la requête.
    Mon maitre de stage m'a dit d'essayer un autre driver -> je ne comprends pas, et il revient dans qq jours.
    Serait il possible d'avoir une brève explication?
    Merci d'avance.
    Bdloul

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Quelle est la requete que vous avez essayé ?

    Certain driver jdbc supporte les offset .. après le code derrière est souvant merdique.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    La requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WITH TABLETMP (ITNO, ITTY, ITDS, STAT) AS (SELECT ROW_NUMBER() OVER(ORDER BY MIT.MMITNO) AS NUM,MIT.MMITNO,MIT.MMITTY,MIT.MMITDS,MIT.MMSTAT FROM MITMAS AS MIT) SELECT * FROM TABLETMP WHERE NUM BETWEEN 1 AND 100
    En fait je pense que je vais faire des fetch first en espérant de pas tomber sur un utilisateur qui appuie 1000 fois de suite sur le bouton next, mais ça me soule un peu de devoir faire un truc aussi sale.

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Euh... votre erreur est normale vous déclarez une table temporaire (with) qui possède 4 colonnes, et dans le sous-select vous en avez 5.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    Merci de ton aide, ça marche, mais comme je le craignais ça ne résout absolument pas le problème de lenteur (~5sec pour charger la page).

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    votre colonne mmitno est indexée ?

    Si oui, est-ce que le plan d'acces l'utilise ? (fonction explain de iseries navigator)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Points : 65
    Points
    65
    Par défaut
    J'ai "résolu" le problème.
    "Fetch first XXX rows" pour n'avoir que les XXX premiers résultats (j'incrémente à chaque <NEXT=>) & "FOR READ ONLY", qui accélère considérablement le temps de lecture de la table.
    J'ai mis aussi "OPTMIZE FOR XXX ROWS", mais je doute de sa pertinence ici.
    Merci de votre aide en tout cas.
    Bdloul

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/09/2011, 09h58
  2. Réponses: 5
    Dernier message: 24/11/2009, 11h56
  3. Taille limite d'une requête SQL
    Par cradleofpain dans le forum VBScript
    Réponses: 2
    Dernier message: 16/05/2007, 14h10
  4. limitation de caractére dans une requête SQL sous Acces
    Par amka dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/08/2006, 15h15
  5. Réponses: 4
    Dernier message: 14/12/2004, 14h34

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