{MySQL} Question sur la fonction INDEX

Résolu/Fermé
alter - 8 juin 2009 à 17:11
 alter - 8 juin 2009 à 19:30
Bonjour,
Dans la table ci-dessous, quel est l'intérêt d'indexer un nom plutôt que le ID ?
CREATE TABLE test (
id INT NOT NULL,
name CHAR(30) NOT NULL,
description VARCHAR(150)
PRIMARY KEY (id),
INDEX name (name)
);
A voir également:

5 réponses

dam75 Messages postés 1043 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
8 juin 2009 à 18:52
Bonjour,
Les index servent à accélerer les rechercher et les tris ... donc si tu veux pouvoir faire une rechercher sur le NOM (WHERE category_name ....) , ou un tri (ORDER BY category_name) il FAUT l'indexer ...

Donc 2 index n'ont rien à voir l'un avec l'autre, ils sont complémentaires ...

Bon courage
1
L'ajout d'INDEX est une question de performance.
L'ajout d'INDEX est pertinent sur :
- les champs utilisés pour les clés étrangères (ON ... = ...)
- les champs sur lesquels des tris sont très souvent utilisés (ORDER BY ...)
- les champs sur lesquels des filtres sont très souvent utilisés (WHERE ...)

Attention cependant : l'ajout d'INDEX peut également nuire aux performances, en particulier lors de l'insertion ou de la modification des données indexées, et d'autant plus s'il y a plusieurs INDEXes.
1
Bonjour

Le nom n'est pas indexé plutôt que l'id, car l'id est une KEY et KEY est synonyme de INDEX.
Donc les deux sont indexés en fait
0
Merci pour la réponse. Mais un doute persiste parce que j'ai voulu faire un exemple qui n'est pas adaptée à ma question. Je voulais plutôt demander, d'après les 2 tables ci-dessous, quel est l'intérêt d'indexer un nom (categorie_name) plutôt que le ID (categorie_id) ? (Dans l'ex du dessus en effet je comprends qu'il n'y a pas de réel utilité à marquer "INDEX (name)" en plus de" PRIMARY KEY (id)".)
Si je me réfère à ta réponse, je devrais donc dire que, dans ce cas, categorie_id et categorie_name sont indexés. Est-ce exacte ? Et si oui, est-ce utile d'indexer categorie_name en plus de categorie_id ?

create table categorie
(
categorie_id integer not null auto_increment,
categorie_name varchar(100) binary not null,
categorie_description varchar(250) binary,
primary key (categorie_id),
unique (categorie_id,categorie_name)
) ENGINE = InnoDB;

create table rubrique_test (
rubrique_test_id INT NOT NULL,
rubrique_test_name CHAR(30) NOT NULL,
rubrique_test_description VARCHAR(150)
PRIMARY KEY (rubrique_test_id),
unique (rubrique_test_id,rubrique_test_name),
INDEX (categorie_name)
FOREIGN KEY (categorie_id) REFERENCES categorie (categorie_name) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB;

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MERCI A.Nonymous et dam75 pour ces réponses qui m'éclairent beaucoup.
Bonne journée !
0