The flat query count version shows the problem clearly:
SELECT * FROM ((SELECT BinaryPackageBuild.distro_arch_series, BinaryPackageBuild.id, BinaryPackageBuild.package_build, BinaryPackageBuild.source_package_release FROM BinaryPackageBuild, BinaryPackagePublishingHistory, BinaryPackageRelease, DistroArchSeries, PackageBuild, SourcePackagePublishingHistory WHERE BinaryPackageBuild.package_build = PackageBuild.id AND BinaryPackageBuild.distro_arch_series = DistroArchSeries.id AND SourcePackagePublishingHistory.distroseries = DistroArchSeries.distroseries AND SourcePackagePublishingHistory.sourcepackagerelease = BinaryPackageBuild.source_package_release AND SourcePackagePublishingHistory.id IN (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) AND SourcePackagePublishingHistory.archive != PackageBuild.archive AND BinaryPackagePublishingHistory.archive = SourcePackagePublishingHistory.archive AND BinaryPackagePublishingHistory.binarypackagerelease = BinaryPackageRelease.id AND BinaryPackageRelease.build = BinaryPackageBuild.id ORDER BY BinaryPackageBuild.id) UNION (SELECT BinaryPackageBuild.distro_arch_series, BinaryPackageBuild.id, BinaryPackageBuild.package_build, BinaryPackageBuild.source_package_release FROM BinaryPackageBuild, DistroArchSeries, PackageBuild, SourcePackagePublishingHistory WHERE BinaryPackageBuild.package_build = PackageBuild.id AND BinaryPackageBuild.distro_arch_series = DistroArchSeries.id AND SourcePackagePublishingHistory.distroseries = DistroArchSeries.distroseries AND SourcePackagePublishingHistory.sourcepackagerelease = BinaryPackageBuild.source_package_release AND SourcePackagePublishingHistory.id IN (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) AND SourcePackagePublishingHistory.archive = PackageBuild.archive ORDER BY BinaryPackageBuild.id)) AS "_e" ORDER BY id
is taking 10 seconds (for 50 spph records)
The flat query count version shows the problem clearly:
SELECT * FROM ((SELECT BinaryPackageBu ild.distro_ arch_series, BinaryPackageBu ild.id, BinaryPackageBu ild.package_ build, BinaryPackageBu ild.source_ package_ release FROM BinaryPackageBuild, BinaryPackagePu blishingHistory , BinaryPackageRe lease, DistroArchSeries, PackageBuild, SourcePackagePu blishingHistory WHERE BinaryPackageBu ild.package_ build = PackageBuild.id AND BinaryPackageBu ild.distro_ arch_series = DistroArchSeries.id AND SourcePackagePu blishingHistory .distroseries = DistroArchSerie s.distroseries AND SourcePackagePu blishingHistory .sourcepackager elease = BinaryPackageBu ild.source_ package_ release AND SourcePackagePu blishingHistory .id IN (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) AND SourcePackagePu blishingHistory .archive != PackageBuild. archive AND BinaryPackagePu blishingHistory .archive = SourcePackagePu blishingHistory .archive AND BinaryPackagePu blishingHistory .binarypackager elease = BinaryPackageRe lease.id AND BinaryPackageRe lease.build = BinaryPackageBu ild.id ORDER BY BinaryPackageBu ild.id) UNION (SELECT BinaryPackageBu ild.distro_ arch_series, BinaryPackageBu ild.id, BinaryPackageBu ild.package_ build, BinaryPackageBu ild.source_ package_ release FROM BinaryPackageBuild, DistroArchSeries, PackageBuild, SourcePackagePu blishingHistory WHERE BinaryPackageBu ild.package_ build = PackageBuild.id AND BinaryPackageBu ild.distro_ arch_series = DistroArchSeries.id AND SourcePackagePu blishingHistory .distroseries = DistroArchSerie s.distroseries AND SourcePackagePu blishingHistory .sourcepackager elease = BinaryPackageBu ild.source_ package_ release AND SourcePackagePu blishingHistory .id IN (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) AND SourcePackagePu blishingHistory .archive = PackageBuild. archive ORDER BY BinaryPackageBu ild.id) ) AS "_e" ORDER BY id
is taking 10 seconds (for 50 spph records)