{MySQL} Question sur la fonction INDEX

Résolu
alter -  
 alter -
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)
);
Configuration: Linux Fedora
MySQL 5.0

5 réponses

  1. dam75 Messages postés 1212 Statut Webmaster 67
     
    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
  2. A.Nonymous
     
    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
  3. le père
     
    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
  4. alter
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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