From 780732d2129e2738ce25d225f6046e44142b69dc Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Oct 03 2019 10:33:06 +0000 Subject: Subselect gives better performance Original query based on JOINs is 1000x slower in better cases. Sub-query helps a lot here. Fixes: https://pagure.io/koji/issue/1674 --- diff --git a/hub/kojihub.py b/hub/kojihub.py index 6a9711d..b453a1d 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -7389,10 +7389,13 @@ def build_references(build_id, limit=None, lazy=False): fields = ('id', 'name', 'version', 'release', 'arch', 'build_id') idx = {} q = """SELECT rpminfo.id, rpminfo.name, rpminfo.version, rpminfo.release, rpminfo.arch, rpminfo.build_id - FROM buildroot_listing - JOIN rpminfo ON rpminfo.buildroot_id = buildroot_listing.buildroot_id - JOIN build on rpminfo.build_id = build.id - WHERE buildroot_listing.rpm_id = %(rpm_id)s + FROM rpminfo, build + WHERE + rpminfo.buildroot_id IN ( + SELECT DISTINCT buildroot_id + FROM buildroot_listing + WHERE rpm_id = %(rpm_id)s) + AND rpminfo.build_id = build.id AND build.state = %(st_complete)i""" if limit is not None: q += "\nLIMIT %(limit)i"