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 :

Eradication doublons relatifs et optimisation table


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Eradication doublons relatifs et optimisation table
    bonjour,

    voici la structure de ma table;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE `perso_1` ( `unixtime` varchar(11) NOT NULL default '',
                                         `name` varchar(255) NOT NULL default '',  
                                         `commentaire` varchar(255) NOT NULL default '',
                                         `files` varchar(4) NOT NULL default '', 
                                         `mo` varchar(10) NOT NULL default '', 
                                           PRIMARY KEY  (`unixtime`),  
                                           FULLTEXT KEY `name`(`name`,`commentaire`),  
                                           FULLTEXT KEY `unixtime` (`unixtime`))                      TYPE=MyISAM ;
    la version de mysql que j'utilise : 5.0.32-Debian_7etch1-log

    type de données : unxtime -> "1182605046" etc ...
    name -> "fichier-group"
    commentaire > "bien", "tres.bien" etc..
    files -> "2", "3" etc...
    poid -> "579ko" etc...

    voici mon probleme, ma table actuelle contient 2,000,000 entrée, avec malheureusement qlqs doublons relatifs sur le name ( unixtime different), j'aimerai les eliminés pour ce faire j'ai lu le tutoriel concernant les doublons relatifs, voici la requete que j'ai adapté à ma table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DISTINCT * 
    FROM   perso_1 T1 
    WHERE  EXISTS (SELECT * FROM   perso_1 T2 
                           WHERE  T1.unixtime <> T2.unixtime AND  
                           T1.name    = T2.name);
    ca mouline mais rien ne ce passe j'ai laissé tourné une journée sans succes, j'ai tenté d'exporté les resultats dans un fichier .txt mais ce dernier reste tjr a 0bytes ...
    j'opte pour une autre solution, créé une nouvelle tabe (perso_2) sur l'idée de la premiere mais en ajoutant la contrainte unique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE  perso_2 ADD CONSTRAINT UNIQUE( `name` );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO perso_2 SELECT unixtime, name, commentaire, files, mo FROM perso_1;
    cette commande fonctionne mais dès que je rencontre un doublons j'ai cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR 1062 (23000): Duplicate entry 'fichier-group' for key 2
    est t'il possible de skipé (passer outre) ces erreurs et continué l'importation?

    j'aimerai par la suite optimisé cette table, car les select sont assez long, j'ai pensé faire un index, mais je ne sais pas trop comment m'y prendre ... INDEX ou FULLTEXT ?
    est ce bon ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX part_of_name ON perso_2 (name(30));
    merci d'avance pour vos reponses :>

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Il y a l'option IGNORE qui permet de supprimer les doublons, mais cela prendra uniquement la 1ère entrée des doublons trouvés.

    Pour ton champ name, je pense qu'un index est plus adaptée, après si tu as besoin de faire une recherche sur une portion du contenu de cette colonne, c'est sûr qu'un fulltext est mieux à mon avis(qui n'est pas celui d'un expert ).

  3. #3
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    les select sont assez longs ? cela depend de vos requetes !
    Vous ne pouvez pas mettre des index sur toutes les colonnes de vos tables.

    Si vous souhaiter faire des rechercher sur un nom, il semble judicieux de poser un index sur cette colonne. Cependant attention les recherches avec
    LIKE '%toto%' sont extremenent penalisantes.

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

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

Discussions similaires

  1. Identifier doublons relatifs avec une seule table
    Par idate dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/09/2013, 11h37
  2. [doublon topic, FERMETURE] Optimisation requete 3 tables
    Par arobaskette dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/07/2013, 09h18
  3. Réponses: 12
    Dernier message: 02/01/2012, 18h38
  4. Pb de doublons relatifs dans une table
    Par crouba dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/01/2009, 11h39
  5. [Oracle 8i]Recherche doublon sur une même table
    Par fmoriet dans le forum Oracle
    Réponses: 3
    Dernier message: 01/08/2006, 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