подвыбор запроса - PullRequest
       15

подвыбор запроса

0 голосов
/ 23 сентября 2011

У меня есть этот запрос, и он очень медленный.Могу ли я написать этот запрос другим способом, избегая, например, подселектов?

Также я попытался добавить составной индекс на

MyIndex(kategorije_id,izdvojen,izdvojen_kad,datum)

, но он действительно используется, когда я объясняю этот запрос, так что есть другойиндекс, который я могу использовать, чтобы ускорить этот запрос?

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

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Попробуйте этот запрос:

SELECT a.datum AS brojx, a.izdvojen AS i, a.izdvojen_kad AS ii, a.name 
FROM artikli a
WHERE a.izbrisan =0
AND a.prodano !=3
AND a.zavrseno =0
AND a.od_id !=0
AND a.kategorije_id = 18
AND EXISTS 
   (select 'X' 
   from artikli_polja ap,
   JOIN polja p
   ON ap.id_polja = p.id AND p.id_kat = a.kategorije_id
   AND ap.id_artikal = a.id
   AND p.name = 'godiste'
   AND ap.valueInt >= 1993 AND ap.valueInt <= 2000
   );

Пожалуйста, проверьте.

1 голос
/ 23 сентября 2011

Попробуйте этот запрос -

SELECT a.datum AS brojx, a.izdvojen AS i, a.izdvojen_kad AS ii, a.name FROM artikli a
  JOIN artikli_polja ap
    ON ap.id_artikal = a.id
  JOIN polja p
    ON ap.id_polja = p.id AND p.id_kat = a.kategorije_id
WHERE
  a.izbrisan =0
  AND a.prodano !=3
  AND a.zavrseno =0
  AND a.od_id !=0
  AND kategorije_id = 18
  AND p.name = 'godiste'
  AND ap.valueInt >= 1993 AND ap.valueInt <= 2000;

Я удалил из запроса предложения ORDER BY и LIMIT;попробуйте сначала обработать этот запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...