Bonsoir à tous,
Je me suis mis au moteur InnoDB de MySQL pour pouvoir gérer les clés étrangères. Je modélise avec Workbench.
Lorsque je crée une clé étrangère dans une table, il créé un index lié à cette clé qu'on ne peut pas enlever.
D'après le site officiel pourtant http://dev.mysql.com/doc/refman/5.6/...eign-keys.html
Ce que je comprends comme "s'il y a déjà un index équivalent, il le réutilise au lieu de faire un deuxième index.index_name represents a foreign key ID. The index_name value is ignored if there is already an explicitly defined index on the child table that can support the foreign key
Je me retrouve avec des tas d'index, par exemple dans cette table qui lie 2 fois la même colonne de la table "staff" une fois pour la création, une fois pour la modification :
Les 2 référencent la même colonne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 CREATE TABLE IF NOT EXISTS `datab`.`tabone` ( `taboneId` INT(6) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '', `name` VARCHAR(150) NOT NULL COMMENT '', `staffCreatId` INT(6) UNSIGNED NOT NULL COMMENT '', `dateCreation` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '', `staffModifId` INT(6) UNSIGNED NOT NULL COMMENT '', `dateModification` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '', PRIMARY KEY (`taboneId`) COMMENT '', INDEX `fk_tabone_staff1_idx` (`staffCreatId` ASC) COMMENT '', INDEX `fk_tabone_staff2_idx` (`staffModifId` ASC) COMMENT '', CONSTRAINT `fk_tabone_staff1` FOREIGN KEY (`staffCreatId`) REFERENCES `datab`.`staff` (`staffId`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_tabone_staff2` FOREIGN KEY (`staffModifId`) REFERENCES `datab`.`staff` (`staffId`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB.
Code : Sélectionner tout - Visualiser dans une fenêtre à part REFERENCES `datab`.`staff` (`staffId`)
Je comprends que le contenu des 2 colonnes est différent (pas les mêmes staff en création et en modification) mais les indexations sont un peu redondantes à mon goût.
En plus, j'ai ce schéma dans un bon nombre de tables, imaginez donc l'identifiant des utilisateurs indéxé 2 fois dans toutes les tables !
Dans Workbench, si je veux supprimer l'index il m'en empêche et dit :
Donc, la question est : puis-je éviter ces indexations massives ?The index fk_tabone_staff2_idx belongs to the Foreign Key fk_tabone_staff2. You must delete the Foreign Key to delete this index
Et question subsidiaire si c'est le cas : puis-je le faire dans Workbench ou faut-il le faire à la main dans le SQL de création de base généré ensuite ?
Merci tout plein !
Partager