Нет, это фича, подселекты в списке select
(Scalar Subquery, а невовсе не Inline View ) рассматриваются и оптимизируются как отдельные запросы и включаются в общий план для "вида", их стоимость в общей стоимости запроса не показывается. Долгое время, если не ошибаюсь до 9-ки вы бы их вообще в плане не увидели, а потом нам стали их показывать, просто примешивая в план основного запроса.
XCB |
повторюсь, хочу понять почему неверен кост и как на это повлиять
|
Оптимизатор, судя по всему, неверно оценивает мощность соединения sigma.client_order с sigma.client_action. Попробуйте sql tune advisor, у вас насколько понимаю Oracle не ниже 10g, возможно он постороит sql profile. Хотя я не знаю работает ли advisor c Scalar Subquery в запросе.
Ну или попытайтесь разобраться с оценками стоимостей соединения и понять почему на ваших данных и статистике такое получается, Льюис вам в руки и Wolfgang Breitling на шею.
При отсутствии гистограмм формула расчета кардинальности соединения:
join cardinality = cardA * cardB * join selectivity
join selectivity = 1/max(ndvA, ndvB)
cardA, cardB оцененая мощность выборки из таблиц после фильтрации (288 и 32M)
ndvA, ndvB - number distinct values по ключу соединения согласно статистике на таблицах.
С гистограммами значительно сложнее, как вариант можно попробовать собрать гистограммы на полях соед инения ии наоборот удалить если они есть.