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 DELETE un peu longue...


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Points : 93
    Points
    93
    Par défaut Requete DELETE un peu longue...
    Hello,

    J'ai une requête qui est très longue, mais je ne pense pas qu'elle soit fausse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM zones_images z_i, zones_textes z_t, zones_textes_images z_t_i, elements_pages e_p USING zones_images z_i, zones_textes z_t, zones_textes_images z_t_i, elements_pages e_p WHERE z_t_i.id=".$id_z_t_i." AND z_t.id=z_t_i.id_z_txt AND z_i.id IN (z_t_i.id_z_img_1,z_t_i.id_z_img_2,z_t_i.id_z_img_3,z_t_i.id_z_img_4) AND e_p.id_page=".$id_page." AND e_p.id_elmt=".$id_z_t_i." AND e_p.typ_elmt='z_txt&img'
    J'effectue là une suppression dans trois tables, à l'aide d'une seule requête.

    Mes principales questions sont:

    - ma requête est-elle bonne ?
    (des fois que j'ai homis que ce cas ne soit possible que dans certaines conditions)

    - est-ce qu'il vaut mieux séparer la suppression dans plusieurs requêtes ?
    (au niveau lecture il est certain que ce sera plus lisible, mais au niveau perf., ne vaut-il pas mieux tout regrouper pour limiter justement le nombre de demande...et n'en faire qu'une ?)

    Voila.

    Merci et si vous avez d'autres remarques je suis preneur.
    Thierry

  2. #2
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Bonjour

    Qu'advient-il des temps d'execution lorsque cette requête est transformée en select ? En utilisant EXPLAIN, voit-on dans le plan l'utilisation d'un index ? Quelle est la volumétrie ?
    Pensez au tag

  3. #3
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    Commence par nous montrer une requête lisible telle qu'elle sera envoyée au serveur MySQL en faisant un echo de ta chaîne de caractères

    C'est souvent mieux au niveau logique et pour les performances de faire un DELETE sur plusieurs lignes de tables différentes qui sont liées.
    Tu as testé la requête ?
    Pensez au bouton

  4. #4
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Points : 93
    Points
    93
    Par défaut
    Waouh...

    j'ai pas tout compris, mais je vais essayer de présenter un peu mieux la requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE FROM zones_images z_i, zones_textes z_t, zones_textes_images z_t_i, elements_pages e_p 
    USING zones_images z_i, zones_textes z_t, zones_textes_images z_t_i, elements_pages e_p 
    WHERE z_t_i.id=".$id_z_t_i." AND z_t.id=z_t_i.id_z_txt AND z_i.id IN (z_t_i.id_z_img_1,z_t_i.id_z_img_2,z_t_i.id_z_img_3,z_t_i.id_z_img_4) AND e_p.id_page=".$id_page." AND e_p.id_elmt=".$id_z_t_i." AND e_p.typ_elmt='z_txt&img'
    Je supprimer les lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM zones_images z_i, zones_textes z_t, zones_textes_images z_t_i, elements_pages e_p
    Je me sert des tables suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    USING zones_images z_i, zones_textes z_t, zones_textes_images z_t_i, elements_pages e_p
    En fonction de conditions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE z_t_i.id=".$id_z_t_i." AND z_t.id=z_t_i.id_z_txt AND z_i.id IN (z_t_i.id_z_img_1,z_t_i.id_z_img_2,z_t_i.id_z_img_3,z_t_i.id_z_img_4) AND e_p.id_page=".$id_page." AND e_p.id_elmt=".$id_z_t_i." AND e_p.typ_elmt='z_txt&img'
    La seule variable présente dans la requête est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_z_t_i = nombre entier représentant l'identifiant de zones_textes_images z_t_i
    Bon je sais que le code a l'air fastidieux et je ne sais pas comment vous l'expliquer autrement, mais je souhaiterait savoir si d'une manière générale il vaut mieux utiliser ce genre de requête pour faire une suppresion ou alors une requete par table ? sachant qu'il faudrait dans ce cas sans doute faire des select auparavant pour connaitre les identifiant non connu avant !
    (la requete sur une ligne [celle-ci] à l'avantage justement de faire des liaisons, comme un INNER JOIN)

    EDIT: euh..la requête fonctionne bien ! sans soucis.

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

Discussions similaires

  1. [MySQL] Message ou image "en cours d'enregistrement" sur requete un peu longue
    Par ricomario dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/04/2012, 15h21
  2. Requete SELECT OleDb un peu longue
    Par KaloOopS dans le forum C#
    Réponses: 5
    Dernier message: 17/07/2011, 11h49
  3. probleme requete DELETE
    Par Ice-tea dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/06/2006, 13h47
  4. PB requete delete
    Par letudiant1 dans le forum ASP
    Réponses: 11
    Dernier message: 24/10/2005, 08h22
  5. [SQL] requetes inbriquées un peu plus complexe.
    Par Devil666 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2005, 11h06

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