Один из способов оптимизации сложных запросов состоит в сравнении реальной кардинальности с прогнозом оптимизатора. Допустим, на каком-то шаге плана выполнения оптимизатор ожидал выбрать N строк, а реально было выбрано M, «сильно не похожее» на N. Стало быть, оптимизатор исходил из неправильных представлений и, скорее всего, построил неудачный план. Причин тому может быть много: отсутствие или неадекватность необходимой статистики, невозможность воспользоваться имеющейся статистикой, а также такие штуки, как коррелированность предикатов... Но, по крайней мере, понятно, где копать.
Оракл постепенно движется, с одной стороны, к усложнению и уточнению статистики (говорят, в 11g коррелированность уже можно победить), а с другой — к возможностям «самосовершенствования» (механизм bind peeking в 11g, порождающий разные планы при наличии гистограммы на столбце).
Спрашивается: почему бы не сделать так, чтобы после каждого выполнения запроса проводилась «работа над ошибками»? Увидев, что на каком-то шаге имеется несоответствие между имеющейся статистикой и реальным положением дел, Оракл мог бы автоматически создавать некую дополнительную статистику, чтобы в следующий раз базироваться на более точных прогнозах.
Оно, конечно, не просто, но если подумать...