J'ai cette requête et c'est très lent. Puis-je écrire cette requête autrement en évitant les sous-sélections par exemple?requête avoding subselect
i également essayé d'ajouter indice composite sur
MyIndex(kategorije_id,izdvojen,izdvojen_kad,datum)
mais il doesent l'utiliser quand j'expliquer cette requête est donc là un autre indice que je peux utiliser pour accélérer cette recherche?
SELECT artikli.datum AS brojx, artikli.izdvojen AS i, artikli.izdvojen_kad AS ii, artikli.name
FROM artikli
WHERE artikli.izbrisan =0
AND artikli.prodano !=3
AND artikli.zavrseno =0
AND artikli.od_id !=0
AND kategorije_id
IN (18)
AND (
SELECT count(*)
FROM artikli_polja, polja
WHERE polja.id_kat = artikli.kategorije_id
AND artikli_polja.id_polja = polja.id
AND artikli_polja.id_artikal = artikli.id
AND polja.name = "godiste"
AND artikli_polja.valueInt >= "1993"
) >0
AND (
SELECT count(*)
FROM artikli_polja, polja
WHERE polja.id_kat = artikli.kategorije_id
AND artikli_polja.id_polja = polja.id
AND artikli_polja.id_artikal = artikli.id
AND polja.name = "godiste"
AND artikli_polja.valueInt <= "2000"
) >0
ORDER BY i DESC , ii DESC , brojx DESC
LIMIT 140 , 35
'Limite x décalage y', devient plus lent lorsque le décalage augmente. – Johan
Votre requête actuelle (lente) retournera une ligne de table artikli qui répond à tous les autres critères et a des lignes artikli_polja avec valueInt> = '1993' et <= '2000', même si ces conditions ne se produisent pas dans le même ** Ligne artikli_polja. Par exemple, si une ligne a valueInt 1990 et une autre a valueInt 2010, la ligne artikli liée sera sélectionnée. Est-ce le comportement que vous voulez? Sinon, voulez-vous que la ligne artikli soit sélectionnée seulement si elle répond aux autres critères et s'il y a au moins une ligne artikli_polja avec un valueInt qui est> = 1993 et <= 2000? – UltraOne