Bonjour,
J'ai crée une base dont voici le code :
Voici quelque lignes insérées :Code:
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:
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:
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:
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