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 :

Questions d'optimisation de requêtes


Sujet :

Requêtes MySQL

  1. #21
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par beberd
    En l'occurence si car 15=id_cln et 14=id_cln de la table clients.
    Donc si il y a une ressemblance > 75% l'un est forcement un doublon de l'autre.
    Donc aucun intérêt pour moi d'avoir les 2 "14-15" et "15-14"
    Je voulais juste dire que ce n'est pas cela qui provoque l'erreur "duplicate key".

    Citation Envoyé par beberd
    Je ne veux pas remplacer dans ma table clients mais créés une table doublons avec quelques infos (id_cln1,id_cn2,matchcode1,matchcode2,rs1,rs2)
    Car une fois cette table doublons créées, je n'ai plus qu'à valider si ces doublons sont effectifs.
    J'ai bien compris. Mais au lieu d'insérer dans cette table de doublons, tu y fais un "insérer ou remplacer" (REPLACE), afin que des éventuels doublons ne bloquent plus le processus.

    Citation Envoyé par beberd
    Non je l'ai déclaré comme un index mais je n'y ai pas rajoutté de condition de clefs primaires dessus!!!
    Est-ce important? Est-ce que cela peux poser problème?
    On parle bien de clients.id_cln ?
    En soi ce n'est pas un problème, mais ça veut dire que rien ne garantit que tes id_cln sont uniques. En fait, je pense qu'il existe sans doute un doublon d'id_cln, ce qui expliquerait l'erreur que tu as obtenue.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  2. #22
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Antoun
    Je voulais juste dire que ce n'est pas cela qui provoque l'erreur "duplicate key".


    Citation Envoyé par Antoun
    J'ai bien compris. Mais au lieu d'insérer dans cette table de doublons, tu y fais un "insérer ou remplacer" (REPLACE), afin que des éventuels doublons ne bloquent plus le processus.
    Si je comprends bien en mettant replace il va me remplacer mon id1 (table doublons = 1212) si je cherche a insérer une ligne où id1=1212?
    Le problème c'est que si j'agis ainsi je ne tiens pas compte que sur 13500 id_cln (clients), id_cln=1 peut avoir pour doublons id_cln=2 et id_cln=13500
    Par conséquent mon but est donc bien d'insérer dans une table doublons qui n'a pas de clef primaire bien entendu enfin pas de condition unique.


    Citation Envoyé par Antoun
    On parle bien de clients.id_cln ?
    En soi ce n'est pas un problème, mais ça veut dire que rien ne garantit que tes id_cln sont uniques. En fait, je pense qu'il existe sans doute un doublon d'id_cln, ce qui expliquerait l'erreur que tu as obtenue.
    J'ai eu l'erreur à nouveau (mon test lance ce matin à 09h00 sur la même erreur) alors que je cherche cette fois-ci juste à renvoyer le résultat à l'écran et non plus dans une table!!!

  3. #23
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par beberd
    Si je comprends bien en mettant replace il va me remplacer mon id1 (table doublons = 1212) si je cherche a insérer une ligne où id1=1212?
    Non, pas exactement. Supposons que tu aies une ligne avec id1 = 1212 et id2 = 1. Si fais un REPLACE avec une ligne 1212 / 2, ce sera une insertion. Ce n'est que si tu fais un REPLACE avec une autre ligne 1212 / 1 que cette nouvelle ligne remplacera l'ancienne. En effet, ta clé contient deux colonnes, il n'y a donc doublon que si les deux colonnes sont doublonnées.

    Citation Envoyé par beberd
    J'ai eu l'erreur à nouveau (mon test lance ce matin à 09h00 sur la même erreur) alors que je cherche cette fois-ci juste à renvoyer le résultat à l'écran et non plus dans une table!!!
    Quelle requête as-tu lancé exactement ? tu ne peux pas avoir d'erreur "duplicate key" sur un SELECT !
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #24
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    tu devrais déjà créer une version de petit volume (genre 1000 lignes) de ta table clients, afin de valider la technique sans avoir à attendre le résultat toute la journée...
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Merci Antoun.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tu devrais déjà créer une version de petit volume (genre 1000 lignes) de ta table clients, afin de valider la technique sans avoir à attendre le résultat toute la journée...
    A ce sujet, est -il possible de rediriger la création d'une table temporaire ?
    Par défaut elle se crée sous C:/windows/temp
    Je voudrais qu'elle se crée sur D:/temp
    Où puis-je changer ce paramètre ?

    Merci

  6. #26
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par beberd
    A ce sujet, est -il possible de rediriger la création d'une table temporaire ?
    Par défaut elle se crée sous C:/windows/temp
    Je voudrais qu'elle se crée sur D:/temp
    Où puis-je changer ce paramètre ?
    http://dev.mysql.com/doc/refman/5.0/...ary-files.html

  7. #27
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Merci sivrit c'est cool MAIS le problème c'est que je ne le trouve pas ce fichier safe_mysqld....

  8. #28
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    C'est une option qui peut s'utiliser quand on lance le serveur via la ligne de commande, mais aussi se préciser dans le fichier de configuration ('my.ini' dans le répertoire d'installation avec MySQL 5), comme toutes les options en gros.

    Sinon il faut toucher à la variable d'environnement 'TMPDIR' mais ça me semble moyen. Le fichier de configuration est plus propre.

    ('safe_mysqld' n'a plus l'air d'exister. La doc doit dater ou alors viser la version Linux)

  9. #29
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Merci Sivrit

    Citation Envoyé par Sivrît
    C'est une option qui peut s'utiliser quand on lance le serveur via la ligne de commande, mais aussi se préciser dans le fichier de configuration ('my.ini' dans le répertoire d'installation avec MySQL 5), comme toutes les options en gros.
    Dans my.ini je n'ai rien sur l'utilisation d'un fichier temporaire
    Voilà ce que j'ai concernant le répertoire d'installation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #Path to installation directory. All paths are usually resolved relative to this.
    basedir="C:/Program Files/MySQL/MySQL Server 5.0/"
    Je ne vois donc pas où je peux modifier ce paramètre ni comment le rajoutter?
    Devrais-je rajoutter une ligne TMPDIR=D:\temp
    Est ce qu'il faut que j'utilise un autre nom de variable que TMPDIR? est ce que tu connais Sivrit le nom de cette variable?


    Citation Envoyé par Sivrît
    Sinon il faut toucher à la variable d'environnement 'TMPDIR' mais ça me semble moyen. Le fichier de configuration est plus propre.

    ('safe_mysqld' n'a plus l'air d'exister. La doc doit dater ou alors viser la version Linux)

  10. #30
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par beberd
    Devrais-je rajoutter une ligne TMPDIR=D:\temp
    Presque :
    Les guillements devraient être facultatifs (au moins quand il n'y a pas d'espace). Toutes les options de mysql sont en minuscules (et la case compte).

    TMPDIR en majuscules fait référence à la variable d'environnement qui est un paramètre de l'OS ("Propriétés système", onglet "Avancé", le bouton en bas sous windows).

  11. #31
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 85
    Points
    85
    Par défaut
    Merci sivrit c'est cool pour l'info.

Discussions similaires

  1. question sur les vues et l'optimisation de requêtes
    Par zaboug dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/03/2009, 16h28
  2. Question d'optimisation de requête !
    Par rad_hass dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/11/2008, 12h36
  3. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 19h03
  4. :?: question d'optimisation!
    Par Stopher dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 21/06/2004, 17h15
  5. Optimisation de requête
    Par olivierN dans le forum SQL
    Réponses: 10
    Dernier message: 16/12/2003, 10h09

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