Bonjour,
J'ai crée une base dont voici le code :
Voici quelque lignes insérées :
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
22
23
24 CREATE TABLE `base` ( `Id` int(6) NOT NULL AUTO_INCREMENT, `Organisme` varchar(20) DEFAULT ' ' ', `Civilite` varchar(15) DEFAULT ' ' , `Prenom` varchar(20) DEFAULT ' ', `Nom` varchar(31) DEFAULT ' ' COMMENT 'Nom de la personne', `Fonction1` varchar(30) DEFAULT ' ' COMMENT 'Fonction occupée', `Fonction2` varchar(30) DEFAULT ' ' COMMENT 'Fonction occupée', `Fonction3` varchar(30) DEFAULT ' ' COMMENT 'Fonction occupée', `Fonction4` varchar(30) DEFAULT ' ' COMMENT 'Fonction occupée', `Fonction5` varchar(30) DEFAULT ' ' COMMENT 'Fonction occupée', `Adresse` varchar(45) DEFAULT ' ' , `CP` int(5) DEFAULT NULL, `Ville` varchar(35) DEFAULT ' ', `Telephone` varchar(15) DEFAULT ' ' , `Portable` varchar(15) DEFAULT ' ' , `E-Mail` varchar(50) DEFAULT ' ', `SiteInternet` varchar(45) DEFAULT ' ', `Territoire` varchar(13) DEFAULT ' ', PRIMARY KEY (`Id`), KEY `Territoire` (`Territoire`), KEY `Info` (`Organisme`,`Civilite`,`Prenom`,`Nom`,`Adresse`,`CP`,`Ville`,`Telephone`,`Portable`,`E-Mail`,`SiteInternet`), KEY `Fonction` (`Fonction1`,`Fonction2`,`Fonction3`,`Fonction4`,`Fonction5`) ) ENGINE=MyISAM DEFAULT CHARSET=ascii AUTO_INCREMENT=331 ;
La ligne en gras indique que j'ai crée un index sur 5 colonnes (cf. 1er bloc de code; aperçu image jointe n°2)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 INSERT INTO `base` (`Id`, `Organisme`, `Civilite`, `Prenom`, `Nom`, `Fonction1`, `Fonction2`, `Fonction3`, `Fonction4`, `Fonction5`, `Adresse`, `CP`, `Ville`, `Telephone`, `Portable`, `E-Mail`, `SiteInternet`, `Territoire`) VALUES (1, NULL, 'Monsieur', 'toto', 'toto', 'Agriculteurs', NULL, NULL, NULL, NULL, 'Chamb', 15000, 'LAVEIS', NULL, NULL, NULL, NULL, 'pm'), (8, NULL, 'Monsieur', 'tata', 'tata', 'Conseiller municipal', NULL, 'Agriculteurs', NULL, NULL, 'Mons', 15000, 'VIRA', NULL, NULL, NULL, NULL, 'pm'), (17, NULL, 'Monsieur', 'tutu', 'tutu', 'Conseiller municipal', NULL, NULL, 'Agriculteurs', NULL, 'Moled', 15300, 'LAVEISSEN', '05 99 73 99 89', NULL, NULL, NULL, 'pm'), (24, NULL, 'Madame', 'titi', 'titi', 'Conseillere municipale', NULL, NULL, NULL, 'Agriculteurs', 'Secour', 15000, 'CEL', '05 99 73 99 89', NULL, NULL, NULL, 'pm'), (154, NULL, 'Monsieur', 'tyty', 'tyty', 'Maire de Laviger', 'Agriculteurs', NULL, NULL, NULL, 'Buge', 15300, 'LAVIGER', '05 99 73 99 89', NULL, NULL, NULL, 'pm');
D'après le cours sur le site ce n'est pas recommandé.
Admettons, je veux rechercher tous les agriculteurs, je suis obligé de comparer les valeurs des 5 colonnes à "Agriculteurs" car l'ordre de saisie peut changer.
Je voudrais savoir si en créant un (ou plusieurs) index je peux simplifier cette requête en faisant moins de 5 comparaisons.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM `base` WHERE `Fonction1` LIKE 'a%' or `Fonction2` LIKE 'a%' or `Fonction3` LIKE 'a%' or `Fonction4` LIKE 'a%' or `Fonction5` LIKE 'a%'
Par exemple :
/*Fonction fait référence à l'index crée sur les 5 colonnes fonctions*/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM `base` WHERE `Fonction` LIKE 'a%'
Remarque : Je sais que ma base ne respecte pas les normes, c'est volontaire donc je ne change pas la structure.
Remarque 2 : Un élus peut avoir plusieurs fonctions (ex : tata est conseiller municipal et agriculteurs)
La première image est un aperçu du résultat des 2 premiers bloc de code.
La seconde un aperçu des colonnes indéxées.
Le SGBD que j'utilise est MySQL.
J'espère avoir été assez clair sinon demander des informations supplémentaires.
Max
Partager