Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Использование не того индекса оптимизатором oracle 11.2.0.3  [new]
koct9i
Member

Откуда: Барнео, тот что в Алтайском крае
Сообщений: 10
Доброго всем дня!
Есть следующая проблема запрос использует не тот индекс.
SELECT SUM (nmb1)
FROM table1
WHERE str1 = 'Значение во всей таблице одинаково'
AND nmb1 != 0
AND date1 BETWEEN :B3 AND :B2
AND str2 = 'произвольная строка всегда одной длинны'
AND (str3 IS NULL OR str3 != 'Один символ');

Таблица следующая:

-- Create table
create table table1
(
str1 not null,
date1 DATE not null,
str2 VARCHAR2(50) not null,
nmb1 NUMBER(22,2) not null,
str3 VARCHAR2(1)
)
create index index1 on table1 (str2, date1)
tablespace ANY_DATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
create index index2 on table1 (str2, date1, str1)
tablespace ANY_DATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
create index index3 on table1 (date1, str1)
tablespace ANY_DATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);

Так вот используется индекс index3, причем только внутри хранимой процедуры, вместо index2 или, на крайний случай, index1.
Это в Oracle 11.2.0.3, а в любом 10-м и ниже все нормально используется index2, либо если выполняю запрос в SQLPlus'е.
17 сен 12, 13:28    [13175520]     Ответить | Цитировать Сообщить модератору
 Re: Использование не того индекса оптимизатором oracle 11.2.0.3  [new]
AmKad
Member

Откуда:
Сообщений: 5222
koct9i,

1) Оптимизатор дорабатывается от версии к версии (от релиза к релизу)
2) Идентичны ли данные в этих БД?
3) Каково распределение данных в этих БД (clustering_factor)?
17 сен 12, 13:39    [13175605]     Ответить | Цитировать Сообщить модератору
 Re: Использование не того индекса оптимизатором oracle 11.2.0.3  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2854
koct9i,
Тебе надо, чтобы запрос брал нужный индекс (статистику собери),
или надо понять, почему в разных средах разные планы (10053)?
17 сен 12, 13:58    [13175735]     Ответить | Цитировать Сообщить модератору
 Re: Использование не того индекса оптимизатором oracle 11.2.0.3  [new]
koct9i
Member

Откуда: Барнео, тот что в Алтайском крае
Сообщений: 10
AlexFF__|,

Статистика есть на начало дня, данные еще не поменялись.
Делаю так: Alter system set OPTIMIZER_FEATURES_ENABLE=’10.2.0.3’; и план запроса уже становится другим .
Вся фишка в том, что запрос запускаемый из какого-нибудь клиента, например SQLPLUS'а или PL/SQL Developer'а использует нужный индекс в любом случае, а вот запрос запускаемый внутри процедуры в итерации execute immediate использует неправильный индекс.
17 сен 12, 15:03    [13176382]     Ответить | Цитировать Сообщить модератору
 Re: Использование не того индекса оптимизатором oracle 11.2.0.3  [new]
koct9i
Member

Откуда: Барнео, тот что в Алтайском крае
Сообщений: 10
AlexFF__|,

Вопрос для того и разместил сюда, что не могу понять почему оптимизаторы разных версий используют разные индексы, хинтов никаких нету, кстати их использовать тоже не айс, проект огромный и перелопачивать весь код на эту тему нет возможности, авторов сильно много.
17 сен 12, 15:08    [13176430]     Ответить | Цитировать Сообщить модератору
 Re: Использование не того индекса оптимизатором oracle 11.2.0.3  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2854
koct9i,
Найди запрос в V$SQL_SHARED_CURSOR и посмотри, только ли в версии оптимизатора дело.
17 сен 12, 15:16    [13176518]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить