Oracle high_value статистика - PullRequest
       12

Oracle high_value статистика

0 голосов
/ 27 августа 2018

Рассмотрим этот вид таблицы:

create table t (
   id number,       -- and many many other columns of course
   record_date date -- the date when the rows is inserted
);

В этой таблице мы добавляем 400 тыс. Строк в час. И каждый час мы запускаем запрос с использованием последнего часа данных. A SQL как:

SELECT 
    ... 
FROM t
INNER JOIN ... -- t is joined with many other tables
INNER JOIN ... 
INNER JOIN ... 
INNER JOIN ... 
WHERE 
   t.record_date >= :my_current_date - 1/24
;

Проблема, с которой мы столкнулись, заключается в том, что План часто плохой в такой ситуации. Вот причина, по которой:

Когда Oracle вычисляет статистику таблицы, она сохраняет max(record_date) в статистике под названием high_value . Таким образом, когда запускается SQL, Oracle сравнивает фильтр t.record_date >= :my_current_date - 1/24 с высоким значением_в столбце record_date и считает, что вряд ли строка будет возвращена (вместо 400k). Поэтому оптимизация следующих объединений не может быть хорошей ...

Какое наилучшее решение в такой ситуации? Я мог бы использовать подсказку, например ...

1 Ответ

0 голосов
/ 04 сентября 2018

Я использовал подсказку OPT_ESTIMATE (TABLE t MIN = 400000), и она работает до сих пор. Спасибо пьезол!

...