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

PHP & Base de données Discussion :

Requête vraiment top longue via php


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de Devether
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Points : 54
    Points
    54
    Par défaut Requête vraiment top longue via php
    Bonjour,

    J’exécute une requête sur sql developer qui met entre 5 et 10 secondes à charger les résultats.
    Quand j’exécute cette même requête dans un script php avec oci, celle-ci prend... 80 minutes.

    Elle me retourne environ 30000 enregistrements.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT SD.INCIDENT_ID                                             AS "INTERACTION",
      SD.COMPANY                                                      AS "SOCIETE",
      SD.OPEN                                                         AS "STATUT",
      SD.AFFECTED_ITEM                                                AS "DEVICETYPE",
      SD.LOGICAL_NAME                                                 AS "CI",
      SD.TITLE                                                        AS "RESUME",
      SD.DESCRIPTION                                                  AS "DESCRIPTION",
      SD.RESOLUTION                                                   AS "SOLUTION",
      SD.OPEN_TIME                                                    AS "DATECREATION",
      SD.UPDATE_TIME                                                  AS "DATEMAJ",
      SD.CLOSE_TIME                                                   AS "DATECLOTURE",
      SD.OPENED_BY                                                    AS "CREATEUR",
      SD.CALLBACK_CONTACT                                             AS "APPELANT",
      SD.SUBCATEGORY                                                  AS "DOMAINE",
      SD.PRODUCT_TYPE                                                 AS "SOUSDOMAINE",
      SD.RESOLUTION_CODE                                              AS "CODECLOTURE",
      SD.PRIORITY_CODE                                                AS "PRIORITE"
    FROM INCIDENTSM1 SD
    LEFT OUTER JOIN LOCM1 LOC
      ON (LOC.LOCATION_FULL_NAME = SD.LOCATION_FULL_NAME)
    WHERE SD.CATEGORY      = 'incident'
    AND SD.OPEN_TIME      >= TO_DATE('2013-01-01', 'YYYY-MM-DD')
    ORDER BY SD.INCIDENT_ID;

    PHP 5.4.16 (cli)
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
    Oracle instantclient 11.2

    Quelqu'un pourrait-il m'expliquer pourquoi cette différence de temps et surtout comment faire pour corriger cela ?

    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 174
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    SQL Dev limite le nombre de résultats en sortie.
    Et peut être fais tu d'autres traitements dans ton code php ?

    A mon niveau je doute de l'utilité d'afficher tous tes résultats, il faudrait donc soit affiner la requête soit paginer les résultats.
    NginX, SphinxSearch Addict !!

  3. #3
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Bonjour,

    Comme le dit Lenono, SQL Dev ne t'affiche pas les 30000 resultats, c'est pour ça qu'il va plus vite, et paginer/lotir est probablement la seule façon de t'en sortir! L'idée pourrait être de faire une requête "count (*)" pour savoir combien il y aura d'enregistrements a traiter, mais de ne les traiter ensuite que par petits lots en utilisant rownum (sélectionne n premières lignes et donc nécessite que le traitement mette a jour les data pour qu'elles ne soient plus récupérées par la requête aux exécutions suivantes) ou rowid (la meme requete Oracle renvoi les mêmes résultats, en la réexecutant il est alors possible d'exploiter les rowid pour ne prélever que les résultats entre x et y, par ex 0 à 500, puis 501 à 1000, etc...). Qu'est ce que tu fais de ces résultats, c'est pour du traitement batch, de l'éditique, de l'ihm?
    Signature à venir...
    Ancienne : Divers NTIC (PHP, Dojo, à venir...) : http://tif44.fr/blog/

Discussions similaires

  1. Exécuter requête HTTP via PHP
    Par calitom dans le forum Langage
    Réponses: 0
    Dernier message: 15/07/2010, 15h11
  2. top 10 des requêtes les plus longues
    Par cseguino dans le forum Administration
    Réponses: 1
    Dernier message: 10/02/2010, 09h46
  3. Réponses: 6
    Dernier message: 25/09/2009, 11h10
  4. Requête Access via PHP/XML
    Par saipas dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 06/07/2009, 03h26
  5. [Excel] Exportation d'une requête vers Excel via PHP
    Par Foudébois dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 17/05/2006, 16h46

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