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

Outils MySQL Discussion :

index 2 fois


Sujet :

Outils MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kagura
    Inscrit en
    Avril 2005
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 360
    Par défaut index 2 fois
    Bonjour,
    Dans une base de données, j ai trouvé 2 erreurs:
    - La colonne `id` ne devrait pas faire partie à la fois d'une clé primaire et d'une clé index
    - Plus d'un index de type INDEX existe pour la colonne `id`
    Quelqu'un peut m'expliquer pourquoi?
    Merci

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    salut,

    peux tu donner le script de creation de ta table?quelle version tu utilises?

  3. #3
    Membre éclairé Avatar de kagura
    Inscrit en
    Avril 2005
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 360
    Par défaut
    Version du client MySQL: 5.0.24a
    phpMyAdmin - 2.9.0.3
    CREATE TABLE `test` (
    `id` int(10) NOT NULL auto_increment,
    `code` char(3) NOT NULL default '',
    `pays` char(160) NOT NULL default '',
    `cost` float NOT NULL default '0',
    `status` tinyint(2) NOT NULL default '0',
    PRIMARY KEY (`id`),
    KEY `id` (`id`),
    KEY `code` (`code`),
    KEY `pays` (`pays`),
    KEY `status` (`status`),
    KEY `id_code` (`id`,`code`),
    KEY `cost` (`cost`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=257 ;

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

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    La clef primaire est indexée d'office donc mettre un index explicite dessus n'a pas de sens, ni l'utilier comme partie d'un index sur plusieurs colonnes car il suffit à lui seul à identifier une ligne. Ce qui pourrait expliquer l'erreur.

    J'ai aussi vu ça dans la doc :
    A PRIMARY KEY can be a multiple-column index. However, you cannot create a multiple-column index using the PRIMARY KEY key attribute in a column specification. Doing so only marks that single column as primary. You must use a separate PRIMARY KEY(index_col_name, ...) clause.
    Edit : posté trop tard...
    PRIMARY KEY (`id`),
    KEY `id` (`id`),
    Cela fait totalement double emploi, il n'y a qu'à retirer la deuxième ligne.

    Edit 2 :
    KEY `id_code` (`id`,`code`)
    Inutile car 'id' est unique.

  5. #5
    Membre éclairé Avatar de kagura
    Inscrit en
    Avril 2005
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 360
    Par défaut
    Merci pour cette explication.
    Voulez vous me dire que veut on dire par index? ça sert a quoi?
    Merci d avance

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

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    En version courte un index sur une colonne (ou plusieurs) est une liste triée de toutes ses valeurs qui sert à rechercher rapidement (dans les 'where' et 'join' essentiellement) une valeur ou une plage sans devoir parcourrir toute la table, bref un peu comme l'index à la fin d'un livre. Pour chaque valeur il indique la ou les enregistrements de la table correspondants.

    J'aurais voulu faire un mais je n'ai pas réussi à trouver une réelle explication, juste du quand les utiliser, vérifier qu'ils sont utilisés...

    http://mysql.developpez.com/faq/?pag...S_mettre_index
    http://dev.mysql.com/doc/refman/5.0/fr/indexes.html

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Par défaut
    Pour info, j'ai moi aussi ce warning :
    "Plus d'un index de type FULLTEXT existe pour la colonne `s_name`"
    car cette colonne (du varchar) est utilisée par 2 index fulltext différents.
    Mais bon, il me faut absolument ces 2 index, donc tant pis pour le warning.
    Ce qui est marrant, c'est qu'il ne bronche pas lorsque ça se produit avec des champs de type text.

Discussions similaires

  1. Index, puis-je marquer les entrées en une seule fois ?
    Par ragusadouble dans le forum Word
    Réponses: 2
    Dernier message: 26/08/2011, 22h06
  2. Index deux fois sur deux champs..
    Par Romalafrite dans le forum Requêtes
    Réponses: 0
    Dernier message: 13/06/2008, 10h27
  3. Réponses: 2
    Dernier message: 23/08/2007, 14h04
  4. Indexer deux tables à la fois
    Par Info_76 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/08/2007, 16h39
  5. un index à la fois défini et non-défini
    Par Biosox dans le forum Langage
    Réponses: 4
    Dernier message: 03/04/2007, 16h00

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