Skip to content

Instantly share code, notes, and snippets.

@asvanberg
Created August 28, 2017 14:44
Show Gist options
  • Save asvanberg/64865561fc8d20ed00ecea8b39b86fb2 to your computer and use it in GitHub Desktop.
Save asvanberg/64865561fc8d20ed00ecea8b39b86fb2 to your computer and use it in GitHub Desktop.
zipkin query optimization
-- original
SELECT DISTINCT
`zipkin_spans`.`trace_id_high`,
`zipkin_spans`.`trace_id`,
MAX(`zipkin_spans`.`start_ts`)
FROM
`zipkin_spans`
JOIN
`zipkin_annotations` ON (`zipkin_spans`.`trace_id_high` = `zipkin_annotations`.`trace_id_high`
AND `zipkin_spans`.`trace_id` = `zipkin_annotations`.`trace_id`
AND `zipkin_spans`.`id` = `zipkin_annotations`.`span_id`)
WHERE
(`zipkin_spans`.`start_ts` BETWEEN 1501585320000000 AND 1503921750930000
AND `zipkin_annotations`.`endpoint_service_name` = 'api')
GROUP BY `zipkin_spans`.`trace_id_high` , `zipkin_spans`.`trace_id`
ORDER BY MAX(`zipkin_spans`.`start_ts`) DESC
LIMIT 10
-- optimized
SELECT
zipkin_spans.*
FROM
(SELECT
trace_id_high, trace_id, MAX(start_ts) AS duration
FROM
zipkin_spans
WHERE
start_ts BETWEEN 1501585320000000 AND 1503921750930000
GROUP BY trace_id_high , trace_id) AS zipkin_spans
WHERE
EXISTS( SELECT
1
FROM
zipkin_annotations
WHERE
`zipkin_spans`.`trace_id_high` = `zipkin_annotations`.`trace_id_high`
AND `zipkin_spans`.`trace_id` = `zipkin_annotations`.`trace_id`
AND endpoint_service_name = 'api')
ORDER BY duration DESC
LIMIT 10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment