Mon index n'est pas utilisé quand j'ajoute un champ
Bonjour,
Je me tire les cheveux avec une requête extrêmement longue, et je n'arrive pas à comprendre pourquoi.
J'ai une table "PersonneMorale" qui contient le code Insee de la localité où réside cette personne.
J'ai une deuxième table où le code Insee me donne ville, région, département, etc.
Le champ "codeInsee" est de type varchar(5) dans les deux tables.
Sur la table PersonneMorale, j'ai placé un index sur ce champ et dans la table "localite", le codeInsee est la clef primaire.
Voici une explain que je ne comprend pas :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
mysql> explain SELECT nom FROM PersonneMorale p LEFT JOIN localite l ON p.codeInsee = l.codeInsee;
+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------+
| 1 | SIMPLE | p | ALL | NULL | NULL | NULL | NULL | 22682 | |
| 1 | SIMPLE | l | index | NULL | PRIMARY | 7 | NULL | 36746 | Using index |
+----+-------------+-------+-------+---------------+---------+---------+------+-------+-------------+
2 rows in set (0.00 sec)
mysql> explain SELECT nom, l.ville FROM PersonneMorale p LEFT JOIN localite l ON p.codeInsee = l.codeInsee;
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
| 1 | SIMPLE | p | ALL | NULL | NULL | NULL | NULL | 22682 | |
| 1 | SIMPLE | l | ALL | NULL | NULL | NULL | NULL | 36746 | |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+ |
Pourquoi le fait d'ajouter un champ dans la sélection fait que ma requête ne prend plus l'index primaire ?
D'ailleurs, pourquoi ma clef primaire n'est pas dans les clefs possibles ?
Comment je peux faire pour que ma requête ne soit pas aussi longue (plus de 2 minutes !!!!) ?
Mes tables :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| CREATE TABLE `PersonneMorale` (
`idPersonneMorale` int(11) NOT NULL AUTO_INCREMENT,
[...snipp...]
`nom` varchar(255) NOT NULL,
`cp` varchar(5) NOT NULL,
`codeInsee` varchar(5) NOT NULL,
[...snipp...]
PRIMARY KEY (`idPersonneMorale`),
KEY `idxCodeInsee` (`codeInsee`)
) ENGINE=InnoDB
CREATE TABLE `localite` (
`codeInsee` varchar(5) NOT NULL,
`ville` char(50) NOT NULL,
`arrondissement` char(30) NOT NULL,
`departement` char(30) NOT NULL,
`region` char(30) NOT NULL,
`emploi` char(40) DEFAULT NULL,
`latitude` float DEFAULT NULL,
`longitude` float DEFAULT NULL,
PRIMARY KEY (`codeInsee`)
) ENGINE=InnoDB |
Merci pour vos lumières
Frédéric