With this index: create index packageupload__distroseries__status__archive__idx on packageupload(archive, distroseries, status, id);
original query (packageupload.id desc):
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=0.00..1843.12 rows=31 width=36) (actual time=49.705..1815.657 rows=1 loops=1)
-> Index Scan Backward using distroreleasequeue_pkey on packageupload (cost=0.00..93404.35 rows=1571 width=36) (actual time=49.700..1815.649 rows=1 loops=1)
Filter: ((archive = ANY ('{1,534}'::integer[])) AND (distroseries = 104) AND (status = 0))
Total runtime: 1816.044 ms
(4 rows)
ORDER BY archive desc, PackageUpload.id DESC gives
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=0.00..1150.06 rows=31 width=36) (actual time=237.566..329.911 rows=1 loops=1)
-> Index Scan Backward using packageupload__distroseries__status__archive__idx on packageupload (cost=0.00..58282.10 rows=1571 width=36) (actual time=237.563..329.906 rows=1 loops=1)
Index Cond: ((distroseries = 104) AND (status = 0))
Filter: (archive = ANY ('{1,534}'::integer[]))
Total runtime: 329.973 ms
With this index: create index packageupload_ _distroseries_ _status_ _archive_ _idx on packageupload( archive, distroseries, status, id);
original query (packageupload.id desc):
-------
Limit (cost=0.00..1843.12 rows=31 width=36) (actual time=49.
-> Index Scan Backward using distroreleasequ
Filter: ((archive = ANY ('{1,534}
Total runtime: 1816.044 ms
(4 rows)
ORDER BY archive desc, PackageUpload.id DESC gives
-------
Limit (cost=0.00..1150.06 rows=31 width=36) (actual time=237.
-> Index Scan Backward using packageupload_
Index Cond: ((distroseries = 104) AND (status = 0))
Filter: (archive = ANY ('{1,534}
Total runtime: 329.973 ms