With a new index:
create index packageupload__distroseries__status__archive__idx on packageupload(distroseries, status, archive, id);'
we get
explain analyze SELECT PackageUpload.archive, PackageUpload.changesfile, PackageUpload.date_created, PackageUpload.distroseries, PackageUpload.id, PackageUpload.pocket, PackageUpload.signing_key, PackageUpload.status
FROM PackageUpload
WHERE packageupload.distroseries = 104
AND packageupload.archive IN (1, 534)
AND packageupload.status IN (0)
ORDER BY distroseries desc, status desc, archive desc, PackageUpload.id DESC LIMIT 31
OFFSET 0; QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=0.00..105.89 rows=31 width=36) (actual time=0.106..0.108 rows=1 loops=1)
-> Index Scan Backward using packageupload__distroseries__status__archive__idx on packageupload (cost=0.00..5365.99 rows=1571 width=36) (actual time=0.104..0.106 rows=1 loops=1)
Index Cond: ((distroseries = 104) AND (status = 0))
Filter: (archive = ANY ('{1,534}'::integer[]))
Total runtime: 0.159 ms
(5 rows)
With a new index: _distroseries_ _status_ _archive_ _idx on packageupload( distroseries, status, archive, id);'
create index packageupload_
we get
explain analyze SELECT PackageUpload. archive,
PackageUpload. changesfile,
PackageUpload. date_created,
PackageUpload. distroseries,
PackageUpload. id,
PackageUpload. pocket,
PackageUpload. signing_ key,
PackageUpload. status distroseries = 104 archive IN (1, 534) status IN (0)
QUERY PLAN ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------- - _distroseries_ _status_ _archive_ _idx on packageupload (cost=0.00..5365.99 rows=1571 width=36) (actual time=0.104..0.106 rows=1 loops=1) '::integer[ ]))
FROM PackageUpload
WHERE packageupload.
AND packageupload.
AND packageupload.
ORDER BY distroseries desc, status desc, archive desc, PackageUpload.id DESC LIMIT 31
OFFSET 0;
-------
Limit (cost=0.00..105.89 rows=31 width=36) (actual time=0.106..0.108 rows=1 loops=1)
-> Index Scan Backward using packageupload_
Index Cond: ((distroseries = 104) AND (status = 0))
Filter: (archive = ANY ('{1,534}
Total runtime: 0.159 ms
(5 rows)
Time: 1.931 ms