Bonjour à tous !

J'ai actuellement un problème concernant un JOIN pour une de mes requêtes SQL. J'ai les tables minimalistes suivantes :

VILLE (id, cp, nom)
UTILISATEUR (id, nom, id_ville)
BINÔME (id, id_util1, id_util2)

Je souhaiterais sélectionner les binômes d'un code postal donné en faisant remonter le nom de la ville également.

Avec cette requête, j’obtiens ce que je veux :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
SELECT B.id, V.nom 
FROM BINÔME as B 
INNER JOIN UTILISATEUR as U
ON (U.id = B.id_util1
OR U.id = B.id_util2)
INNER JOIN VILLE as V 
ON V.id = U.id_ville
WHERE V.cp = '01290'
Mais MySql mouline pendant 8 secondes et m'affiche un résultat de 4 lignes en (selon lui) un peu plus de 5 secondes.

Avec un EXPLAIN devant j'obtiens :
type possible_keys key key_len ref rows extra
UTILISATEUR : Index PRIMARY,id_ville id_ville 5 NULL 100000 Using Index
BINÔME : ALL id_util1,id_util2 NULL NULL NULL 50000 Range checked for each record
VILLE : eq_ref PRIMARY PRIMARY 4 db.UTILISATEUR.id_ville 1 Using where

Peut-être est-ce mes index qui ne vont pas ? Je ne comprend pas tout mais le range checked for each record sonne faux... non ?

Si quelqu'un à déjà eu ce cas de figure je suis tout ouïe !