J'ai un problème étrange avec ma requête essayant de joindre 3 tables. Les tables décrivaient:Comportement étrange de JOIN
2 tables similaires (ce entr_es):
Field Type Null Key Default Extra
espid int(11) NO PRI NULL auto_increment
haslo text NO MUL NULL
kat int(11) NO NULL
La deuxième table semble le même, sauf la première colonne whis est nommé IDPol.
La troisième table est:
Field Type Null Key Default Extra
polid int(11) NO PRI NULL
espid int(11) NO PRI NULL
Et voici les questions:
Le premier:
SELECT entr_pl.haslo AS srchaslo, entr_es.haslo AS trghaslo
FROM entr_es, entr_pl, rel_pl_es
WHERE entr_pl.polid=rel_pl_es.polid
AND rel_pl_es.espid=entr_es.espid
AND entr_pl.haslo LIKE "%ludzk%"
fonctionne rapidement, environ 0,2 sec. ce qui me suffit.
Mais l'autre, ce qui est à peu près le même, mais inverse:
SELECT entr_es.haslo AS srchaslo, entr_pl.haslo AS trghaslo
FROM entr_es, entr_pl, rel_pl_es
WHERE entr_pl.polid=rel_pl_es.polid
AND rel_pl_es.espid=entr_es.espid
AND entr_es.haslo LIKE "%hum%"
fonctionne mal - les résultats sont OK, mais la requête prend environ 2,2 pour exécuter et je ne sais pas pourquoi. J'ai regardé EXPLAIN, mais la seule chose que j'ai trouvée est que la deuxième requête, la lente, est "using temporary". Je ne sais pas pourquoi. Je suis sûr qu'il y a quelque chose d'évident que je ne peux pas voir, peut-être qu'il y a aussi un moyen de simplifier ces requêtes.
S'il vous plaît aider et un grand merci à l'avance, Cordialement,
Kamil
=======
Je suis terriblement désolé - je suis allé throught une fois de plus et la problème de ralentissement est ailleurs.
Il est la clause
ORDER BY srchaslo
à la fin de chaque requête. Je l'ai écrit dans mon premier post en pensant que ce n'était pas pertinent, mais ça l'est. Cela fonctionne bien et rapidement sur la première requête, mais ralentit terriblement sur l'autre. J'ai essayé d'ajouter l'instruction COLLATE suivie de différents encodages, mais cela ne fonctionne pas. Ensuite, j'ai essayé d'encapsuler cette requête dans SELECT * FROM (requête) AS t1 et de lancer la commande ORDER BY en dehors de(), mais cela ne marchera pas non plus. La requête est aussi lente qu'elle l'était. Je n'ai pas d'idées pour résoudre ce problème.
C'est tout! Cela fonctionne parfaitement! Comment l'avez-vous découvert? – Basakatu
En tout cas, je vous remercie pour votre aide et votre temps pour résoudre mon problème. Merci à Lieven aussi. Vous êtes tous super! – Basakatu
J'ai eu un problème similaire il y a quelques temps. Je suis content que ça a marché pour toi. – Martin