« longue » ? ou « lente » ?
Dans le premier cas, c'est vraiment une petite requête. Mais si elle est lente, il faut pointer l'absence d'index sur les tables qui en est la principale cause.
Il faut peut-être aussi tenir compte du nombre important d'enregistrements à trier : en plus de l,absence d'index, ça peut effectivement ralentir considérablement l'opération. Le cas échéant, on retrouvera cette requête dans le log de requêtes lentes s'il est activé, à vérifier si nécessaire.
Dans ce cas, un EXPLAIN sur la requête devrait souligner ces effets secondaires :
EXPLAIN SELECT t.champ1,t.champ3,t.champ2
FROM t
INNER JOIN t0 ON t.champ2 = t0.champ2
AND t.champ3 NOT IN(
SELECT DISTINCT(t0.champ3)
FROM t0
WHERE t0.champ2=t.champ2
);
Il en ressortira un tableau d'informations utiles pour tenter d'optimiser tout ça.
À l'exécution, MySQL indique également la durée de cette exécution, ce serait une indication utile ici, je ne peux pas me prononcer davantage sans plus de détails.
______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)