четверг, 29 апреля 2010 г.

Порядок функциональных предикатов в запросе

Как показано в этой замечательной статье, если у оптимизатора нет информации о функции (статистике), то порядок предикатов в WHERE условии соответствует написанному в запросе.

Наличие статистики можно определить по трейсу 10053, в котором содержаться такие строки
No default cost defined for function SOME_FUNCTION
No default selectivity defined for function SOME_FUNCTION

Связать статистику с функцией можно при помощи селективности по-умолчанию:
ASSOCIATE STATISTICS WITH FUNCTIONS quick_function DEFAULT SELECTIVITY 0.1;

Данная команда не очищает закешированные планы. Это можно сделать по хитрому, поменяв комментарий в используемой запросом таблице :)
Кроме селективности для функций можно задавать стоимость (CPU Cost, IO Cost, Net Cost)
ASSOCIATE STATISTICS WITH FUNCTIONS high_cpu_io DEFAULT COST (6747773, 210, 0);

Так же в статье описан Extensible Optimiser, представляющий собой объектный тип, возвращающий статистику по функции во время выполнения запроса.

Комментариев нет: