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

Откуда:
Сообщений: 1133
Есть таблица с индексом(не ПК) по первым 3 полям.
Если выбираем 3 поля из индекса + ещё одно
SELECT
H.T$TTYP     TTYP,
H.T$INVN     INVN,
H.T$COPY     COPY, 
H.T$CUNO     CUNO
from tucarc040100 H
where  
H.T$TTYP='A'
то запос длится 1,5 мин!!!
План:
SELECT STATEMENT Hint=CHOOSE 489 K 26146
TABLE ACCESS FULL TUCARC040100 489 K 7 M 26146

Выбираем только 3 поля (индекса)
SELECT
H.T$TTYP     TTYP,
H.T$INVN     INVN,
H.T$COPY     COPY
from tucarc040100 H
where  
H.T$TTYP='A'
то запрос длится 2 сек.
План:
SELECT STATEMENT Hint=CHOOSE 489 K 346
INDEX FAST FULL SCAN TUCARC040100$IDX1 489 K 4 M 346

Примечание:
Использование хинта /*+INDEX(tucarc040100 tucarc040100$IDX1)*/ ничего не улучшает.
Менять таблу или создать ПК нельзя.
Oracle: 9.2

Подскажите плз из за чего такая разница, и что делать?

Заранее признателен.
10 мар 06, 13:23    [2435009]     Ответить | Цитировать Сообщить модератору
 Re: что делать?  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
Быть может потому,что для полей, лежащих в индексе, доступ к таблице не нужен ?

--
Мне, право, недурно живется,
Хотя я живу не как все.
Я удобно обитаю посредине дороги,
Сидя на белой полосе.
10 мар 06, 13:33    [2435090]     Ответить | Цитировать Сообщить модератору
 Re: что делать?  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2386
Блог
Скорей всего селективность по первому полю маленькая (сколько записей возвращает запрос и сколько это в процентном отношении ко всей таблице?) Во втором случае ничего кроме индекса просматривать не нужно, сервер достанет все значения оттуда, а в первом - после нахождения соответственных записей в индексе надо будет слазить ещё и за данными в блоки данных таблицы -> оптимизатор решает, что проще просмотреть всю таблицу. Варианты решения:
1) Создайте индекс по четырём полям
2) повысьте мелективность запроса (добавьте условий)
10 мар 06, 13:36    [2435110]     Ответить | Цитировать Сообщить модератору
 Re: что делать?  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
Павел Воронцов
Скорей всего селективность по первому полю маленькая (сколько записей возвращает запрос и сколько это в процентном отношении ко всей таблице?)

А может сервер лишь думает что маленькая ? Как насчет статистики ?
10 мар 06, 13:40    [2435133]     Ответить | Цитировать Сообщить модератору
 Re: что делать?  [new]
juks@gala.net
Member

Откуда: Киев
Сообщений: 4212
Вопрос разумеется автору топика ))

--
Мне, право, недурно живется,
Хотя я живу не как все.
Я удобно обитаю посредине дороги,
Сидя на белой полосе.
10 мар 06, 13:40    [2435136]     Ответить | Цитировать Сообщить модератору
 Re: что делать?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1133
Запрос не должен возвращать ни одной записи.
В первом столбце может быть всего 2 значения: 'DGA','DRA'
К сожалению данные статистики не удаётся скопоковать из Toad.
10 мар 06, 14:07    [2435304]     Ответить | Цитировать Сообщить модератору
 Re: что делать?  [new]
Sqaimes
Member

Откуда: Украина, Мариуполь
Сообщений: 443
делал:
SQL> analyze table tucarc040100
2 compute statistics
3 for table
4 for all indexes
5 for all indexed columns
6 /
Table analyzed.
10 мар 06, 14:17    [2435347]     Ответить | Цитировать Сообщить модератору
 Re: что делать?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1133
Sqaimes
делал:
SQL> analyze table tucarc040100
2 compute statistics
3 for table
4 for all indexes
5 for all indexed columns
6 /
Table analyzed.


Спасобо огромное.
Стало летать :)
10 мар 06, 14:55    [2435551]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить