Добавление "отдельного" ключевого слова в запрос 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 ответ
Это указывает на отсутствие индекса где-то. Это также означает, что ваш исходный запрос без отдельного предложения не был оптимизирован. С "отчетливым" также его нельзя было оптимизировать, поэтому план запроса остался прежним. Неоптимизированный запрос сильно различается по производительности из-за полного сканирования таблиц.