Добавление "отдельного" ключевого слова в запрос Oracle приводит к снижению производительности запросов без всякой причины.

Я очень смущен тем, что вижу в базе данных Oracle 10.

У меня есть следующий запрос.

select
t2.duplicate_num
from table1 t1, table2 t2,

( 
   select joincriteria_0 from intable1 it1, intable2 it2 
   where it2.identifier in (4496486,5911382) 
   and it1.joincriteria_0 = it2.joincriteria_0 
   and it1.filter_0 = 1 
) tt

where t1.joincriteria_0 = tt.joincriteria_0
and t2.joincriteria_1 = t1.joincriteria_1
and t2.filter_0 = 3
and t2.filter_1 = 1
and t2.filter_2 not in (48020)

Для меня это не кажется чем-то особенным, вот базовые показатели производительности от Autotrace:

CR_GETS: 318

Процессор: 3

ROWS: 33173

Теперь, если я добавлю в запрос ключевое слово "DISTINCT" (например, "выбрать отличный t2.duplicate_num..."), это произойдет

CR_GETS: 152921

Процессор: 205

ROWS: 305

План запроса не изменился, но логический ввод-вывод увеличивается в 500 раз. Я ожидал, что ЦП будет только повышаться, а логический ввод-вывод практически не изменится.

В результате получается запрос, который выполняется в 10-100 раз медленнее с отдельным ключевым словом. Я могу поместить в приложение код, который бы выделил результирующий набор за короткий промежуток времени. Как это имеет смысл? особенно без изменения плана запроса?

1 ответ

Это указывает на отсутствие индекса где-то. Это также означает, что ваш исходный запрос без отдельного предложения не был оптимизирован. С "отчетливым" также его нельзя было оптимизировать, поэтому план запроса остался прежним. Неоптимизированный запрос сильно различается по производительности из-за полного сканирования таблиц.

Другие вопросы по тегам