Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/11/2006, 09h44   #1
Membre régulier
 
Avatar de kagura
 
Inscription : avril 2005
Messages : 360
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 360
Points : 93
Points : 93
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
__________________
« Seuls vos vrais amis savent où vous frappez pour que ça fasse mal. » - Bernard Werber
kagura est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 10h08   #2
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
salut,

peux tu donner le script de creation de ta table?quelle version tu utilises?
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 11h21   #3
Membre régulier
 
Avatar de kagura
 
Inscription : avril 2005
Messages : 360
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 360
Points : 93
Points : 93
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 ;
__________________
« Seuls vos vrais amis savent où vous frappez pour que ça fasse mal. » - Bernard Werber
kagura est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 11h22   #4
Membre Expert
 
Avatar de Sivrît
 
Inscription : février 2006
Messages : 953
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 953
Points : 1 189
Points : 1 189
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 :
Citation:
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...
Citation:
PRIMARY KEY (`id`),
KEY `id` (`id`),
Cela fait totalement double emploi, il n'y a qu'à retirer la deuxième ligne.

Edit 2 :
Citation:
KEY `id_code` (`id`,`code`)
Inutile car 'id' est unique.
Sivrît est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 11h48   #5
Membre régulier
 
Avatar de kagura
 
Inscription : avril 2005
Messages : 360
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 360
Points : 93
Points : 93
Merci pour cette explication.
Voulez vous me dire que veut on dire par index? ça sert a quoi?
Merci d avance
__________________
« Seuls vos vrais amis savent où vous frappez pour que ça fasse mal. » - Bernard Werber
kagura est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 12h10   #6
Membre Expert
 
Avatar de Sivrît
 
Inscription : février 2006
Messages : 953
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 953
Points : 1 189
Points : 1 189
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
Sivrît est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2006, 17h35   #7
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 43
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 43
Points : 36
Points : 36
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.
chicobra est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h11.


 
 
 
 
Partenaires

Hébergement Web