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 :
Pourquoi le fait d'ajouter un champ dans la sélection fait que ma requête ne prend plus l'index primaire ?
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 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 | | +----+-------------+-------+------+---------------+------+---------+------+-------+-------+
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 :
Merci pour vos lumières
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 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
Frédéric
Partager