Bonjour,

j'ai une table d'environ un million d'entrées avec un index composé "Service" d'une cardinalité de 186.

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
CREATE TABLE `pc_services` (
  `CIE` varchar(5) NOT NULL,
  `NO_ABONNE` varchar(20) NOT NULL,
  `LIEN_DECO` varchar(5) NOT NULL,
  `CD_SERV` varchar(20) NOT NULL,
  `DESCPT` varchar(50) DEFAULT NULL,
  `CS_CTG` varchar(5) NOT NULL,
  `EST_DEM` smallint(6) DEFAULT NULL,
  `NO_SERIE` varchar(20) DEFAULT NULL,
  `DT_INSTAL_FACT` date DEFAULT NULL,
  `DT_ANNUL_FACT` date DEFAULT NULL,
  `DT_INSTAL_TECH` date DEFAULT NULL,
  `DT_ANNUL_TECH` date DEFAULT NULL,
  KEY `Abonne` (`CIE`,`NO_ABONNE`,`LIEN_DECO`),
  KEY `service` (`CS_CTG`,`CD_SERV`) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Contrairement à ce que j'attends la requete simple suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
select * from pc_services as pc_r
where pc_r.cs_ctg=41 and pc_r.cd_serv = 'M41T00'
n'utilise pas l'index "Service":

type;select_type;table;id;possible_keys;key;key_len;ref;rows;Extra
ALL;SIMPLE;pc_r;1;service;NULL;NULL;NULL;908238;Using where

alors que

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
select cs_ctg from pc_services as pc_r
where pc_r.cs_ctg=41 and pc_r.cd_serv = 'M41T00'
l'utilise:

id;select_type;table;type;possible_keys;key;key_len;ref;rows;Extra
1;SIMPLE;pc_r;index;service;service;29;NULL;908238;Using where; Using index

Une requête ne doit retourner que les valeurs incluses dans un index pour qu'il soit utilisé?!

Merci