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) conn derivation-file-name)
(define query (define query
" "
SELECT build_servers.id, SELECT DISTINCT ON (builds.id)
builds.id,
build_servers.id,
build_servers.url, build_servers.url,
builds.build_server_build_id, builds.build_server_build_id,
latest_build_status.timestamp, build_status.timestamp,
latest_build_status.status build_status.status
FROM builds FROM builds
INNER JOIN build_servers ON build_servers.id = builds.build_server_id INNER JOIN build_servers ON build_servers.id = builds.build_server_id
INNER JOIN INNER JOIN build_status
( ON build_status.build_id = builds.id
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 derivations_by_output_details_set INNER JOIN derivations_by_output_details_set
ON builds.derivation_output_details_set_id = ON builds.derivation_output_details_set_id =
derivations_by_output_details_set.derivation_output_details_set_id derivations_by_output_details_set.derivation_output_details_set_id
INNER JOIN derivations INNER JOIN derivations
ON derivations.id = derivations_by_output_details_set.derivation_id ON derivations.id = derivations_by_output_details_set.derivation_id
WHERE derivations.file_name = $1 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))) (exec-query conn query (list derivation-file-name)))

View file

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