(1) Анализ плана выполнения всегда должен быть вашим первым шагом в диагностике проблем производительности SQL
(2) Возможная проблема с написанным запросом заключается в том, что SYSDATE - это функция, которая не являетсяПри оценке до времени выполнения (т. е. после определения плана выполнения) оптимизатор не может использовать гистограммы в столбце метки времени для оценки полезности индекса.Я видел, что приводит к плохим решениям оптимизатора.Если вы можете сначала найти способ вычисления даты, а затем ввести ее в запрос в виде привязки или литерала, это может помочь, хотя на самом деле это всего лишь предположение.
(3) Может быть, лучше в целомспособ структурирования запроса - объединение (возможно полное внешнее объединение) между агрегатными запросами в каждой из таблиц.
SELECT COALESCE(g.thing_,b.thing_), COALESCE(good_count,0), COALESCE(bad_count,0)
FROM (SELECT thing_,count(*) good_count from good_table WHERE ... GROUP BY thing_) g
FULL OUTER JOIN
(SELECT thing_,count(*) bad_count from bad_table WHERE ... GROUP BY thing_) b
ON b.thing_ = g.thing_
(Должен сказать, что странно, что у вас есть две отдельные таблицыкогда у вас также есть столбец состояния, чтобы указать «хорошо» или «плохо». Но, возможно, я переоцениваю.)