У меня есть запрос Oracle в следующем формате:Ускорить медленный оракул запрос
select col1, min(col2), max(col2)
from table1
where col2 between add_months(to_date('12/06/2014', 'mm/dd/yyyy'), -6) and to_date('12/05/2014', 'mm/dd/yyyy')
and col3 = 'CLICKS'
and col4 = '-8'
and col1 in (select col1 from table2 where id = '05742')
group by col1
В моей схеме, table1 очень велико (миллионы, возможно, миллиарды записей), но таблица 2 достаточно мала. Любые идеи о том, как его оптимизировать?
Каков текущий план запроса? Какие индексы доступны? Насколько избирательны различные условия? Сколько строк в 'table1' нужно будет читать для создания агрегатов? Сколько времени занимает запрос? Как быстро вам это нужно? Представлены ли материализованные взгляды? –
любая причина, по которой вы используете ADD + MONTHS в литературе даты вместо изменения строки даты? Не проблема производительности, просто зацепка. Кроме того, 'col4' действительно строка? Если нет, то почему '' -8'' – APC
Что говорит Джастин, плюс. Сколько строк (какой процент) попадает в указанный диапазон дат? Сколько из них имеет 'col1' соответствующие строки в' table2'? Предположительно, вы не используете разделение (несмотря на потенциальные миллиарды строк)? – APC