Speed up a query for derivation builds

This change removes a sequential scan from the query plan, making it much
faster.
This commit is contained in:
Christopher Baines 2020-10-02 17:51:55 +01:00
parent 6e0e33addf
commit af40c1ac13
2 changed files with 13 additions and 14 deletions

View file

@ -205,27 +205,24 @@ ORDER BY latest_build_status.timestamp DESC NULLS LAST, derivations.file_name
conn derivation-file-name)
(define query
"
SELECT build_servers.id,
SELECT DISTINCT ON (builds.id)
builds.id,
build_servers.id,
build_servers.url,
builds.build_server_build_id,
latest_build_status.timestamp,
latest_build_status.status
build_status.timestamp,
build_status.status
FROM builds
INNER JOIN build_servers ON build_servers.id = builds.build_server_id
INNER JOIN
(
SELECT DISTINCT ON (build_id) *
FROM build_status
ORDER BY build_id, id DESC
) AS latest_build_status
ON latest_build_status.build_id = builds.id
INNER JOIN build_status
ON build_status.build_id = builds.id
INNER JOIN derivations_by_output_details_set
ON builds.derivation_output_details_set_id =
derivations_by_output_details_set.derivation_output_details_set_id
INNER JOIN derivations
ON derivations.id = derivations_by_output_details_set.derivation_id
WHERE derivations.file_name = $1
ORDER BY latest_build_status.timestamp DESC")
ORDER BY builds.id, build_status.timestamp DESC")
(exec-query conn query (list derivation-file-name)))

View file

@ -658,9 +658,11 @@ time."
,(build-status-span "")))
(map
(match-lambda
((build-server-id build-server-url
build-server-build-id
timestamp status)
((build-id build-server-id
build-server-url
build-server-build-id
timestamp
status)
`(div
(@ (class "text-center"))
(div