This query
SELECT *
FROM
( SELECT event_id
FROM events_201806
WHERE registry_name='$VCZN://externalcenter/ninaExtCenter_ZN'
UNION ALL SELECT event_id
FROM events_201805
WHERE registry_name='$VCZN://externalcenter/ninaExtCenter_ZN'
UNION ALL SELECT event_id
FROM events_201804
WHERE registry_name='$VCZN://externalcenter/ninaExtCenter_ZN'
UNION ALL SELECT event_id
FROM events_201803
WHERE registry_name='$VCZN://externalcenter/ninaExtCenter_ZN') AS ids
NATURAL INNER JOIN events;
Returns 456 results and takes about 20 ms.
Adding ORDER BY
SELECT *
FROM
(SELECT event_id
FROM events_201806
WHERE registry_name='$VCZN://externalcenter/ninaExtCenter_ZN'
UNION ALL SELECT event_id
FROM events_201805
WHERE registry_name='$VCZN://externalcenter/ninaExtCenter_ZN'
UNION ALL SELECT event_id
FROM events_201804
WHERE registry_name='$VCZN://externalcenter/ninaExtCenter_ZN'
UNION ALL SELECT event_id
FROM events_201803
WHERE registry_name='$VCZN://externalcenter/ninaExtCenter_ZN') AS ids
NATURAL INNER JOIN events
ORDER BY event_ts DESC;
causes the query to take a very long time to complete, about 10 minutes.
Any pointers on how to fix this?
natural joinis a really bad habit to use. You should use an explicit join (it won't make it faster, but it will make it less error prone)OFFSET 0to your inner sub select.