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

Requêtes MySQL Discussion :

Requete avec Substring très lente ( temps d'exécution dépasse 1minute)


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 38
    Par défaut Requete avec Substring très lente ( temps d'exécution dépasse 1minute)
    Bonsoir,
    J'ai un problème de performance avec une requête sql.

    Mon script utilise deux tables :
    table contenant 2 champs : id_table, num_table
    table_bis contenant 2 champs : id, num

    (ci-joint une image qui décrit la requête que je voudrai construire).

    Ma requête actuelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select  table_1.id_table, table2.id_table ,table_bis.ID
    From table table_1, table table_2 , table_bis
    Where table_1.num_table = table_2.num_table 
    And table_bis.ID = table_2.id_table
    And table_1.id_table = 1000 ( par exemple)
    "table" contient 300 000 enregistrements, la requête s’exécute sans aucun problème.

    Je voudrai modifier la requête pour intégrer une condition sur les 4 premiers caractères du champs num_table (au lieu de tester sur tout le champ num_table) ,j'ai utilisé la méthode substring dans la nouvelle requête .

    Nouvelle requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select  table_1.id_table, table2.id_table ,table_bis.ID
    From table table_1, table table_2 , table_bis
    Where substring(table_1.num_table,1,4)   = substring(table_2.num_table , 1, 4)
    And table_bis.ID = table_2.id_table
    And table_1.id_table = 1000
    Problème : l’exécution de la requête prend au moins une minute, ce qui est énorme.
    Avez-vous une solution a mon problème, est-ce qu’il y a un moyen d’optimiser cette requête.

    Merci d'avance pour votre aide (Je remercie aussi ceux qui ont pris la peine de visiter mon post )
    Youness
    Images attachées Images attachées  

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonsoir. Essaies déjà la même requête en effectuant une vraie jointure et pas un produit cartésien pour voir si cela change quelque chose :


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select table_1.id_table FROM table_1 T1
    INNER JOIN table2 T2
    ON substring(T1.num_table, 1, 4)  = substring(T2.num_table, 1, 4)
    INNER JOIN table_bis T3
    ON T3.ID = T2.id_table
    And T1.id_table = 1000

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 38
    Par défaut
    Je te remercie pour ta réponse.
    La requête normal sans substring s'exécute en 0.7 seconde.
    ma requête prend 77 secondes, et la tienne 70s (moyenne sur quelques requêtes) seconde.
    y a-t-il une autre solution pour optimiser cette requête?
    Merci d'avance

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Oui, les index. Tes tables ne doivent pas en avoir notamment sur num_table

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 38
    Par défaut
    J'ai bien un index sur les num_table et num, et les id sont des primary key

    Moi, la seule piste que j'ai ,c'est de créer une nouvelle colonne num_table_bis dans "table", qui contiendra la valeur du champ num_table sur 4 caractères. mais je dois modifier énormément de traitement dans mon appli pour pouvoir mettre à jour ce champs.

    Merci pour ton aide, n'hésites pas si tu as d'autres solutions.

  6. #6
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Je me suis constitué vite fait une table de 100k enregistrements et une requête similaire se fait en moins d'une seconde substring() ou non.

    Peux tu faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SHOW CREATE TABLE nom_table;
    sur chacune des tables et nous montrer ce que tu obtiens ?

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

Discussions similaires

  1. [MVVM] TreeView WPF avec template très lent
    Par fterf dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 09/10/2012, 11h37
  2. Requête avec STRAIGHT_JOIN Trés lente
    Par ahmed. dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/06/2012, 16h54
  3. Requête avec blob très lente.
    Par Alphonse87 dans le forum Hibernate
    Réponses: 2
    Dernier message: 14/08/2008, 12h32
  4. Temps d'exécution très lent
    Par michelin123 dans le forum MATLAB
    Réponses: 14
    Dernier message: 20/11/2007, 16h17
  5. boot avec DD TRÈS lent
    Par troumad dans le forum Composants
    Réponses: 40
    Dernier message: 30/01/2007, 18h11

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