Wyszło mi dla zapytania z pierwszego wariantu (uwzględnia tylko markę o numerze 24)- tego które musiało by być w pętli:
EXPLAIN SELECT samochody.id, samochody.DATA, samochody.marka FROM samochody WHERE samochody.STATUS=2 AND samochody.marka=24 ORDER BY samochody.DATA DESC LIMIT 1
Cytat
"Limit (cost=0.28..0.48 rows=1 width=44)"
" -> Index Scan Backward using samochody_data on samochody (cost=0.28..1123.48 rows=5660 width=44)"
" Filter: ((status = 2) AND (marka = 24))"
natomiast dla:
EXPLAIN SELECT DISTINCT ON (samochody.marka) samochody.marka, samochody.id, samochody.DATA FROM samochody WHERE samochody.STATUS = 2 AND samochody.marka IN (4,24) ORDER BY samochody.marka DESC, samochody.DATA DESC;
Cytat
"Unique (cost=1336.70..1365.00 rows=1 width=44)"
" -> Sort (cost=1336.70..1350.85 rows=5660 width=44)"
" Sort Key: marka, data"
" -> Seq Scan on samochody (cost=0.00..983.90 rows=5660 width=44)"
" Filter: ((marka = ANY ('{4,24}'::integer[])) AND (status = 2))"
czytałem dokumentację ale... nie rozumiem chyba, całkowity koszt zapytania pierwszego to: 1123.48, natomiast drugiego: 1365.00, wychodziłoby na to, że zapytania są porównywalne a nawet drugie byłoby szybsze ponieważ obejmuje wyszukiwanie spośród dwóch marek, natomiast pierwsze zapytanie tylko spośród jednej.
Druga rzecz która mnie zastanawia dlaczego w DISTINCT nie ma uwzględnionego wyszukiwania po indeksie
dataTrzecia rzecz co do tych zapytań, pierwsze zapytanie (wydaje mi się) powinno być dużo szybsze ponieważ jest ustalony LIMIT 1, a w drugim nie ma takowego limitu, dlatego czemu wyniki są zbliżone?