Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / оптимизатор всегда прав? / 15 сообщений из 15, страница 1 из 1
09.04.2003, 17:43
    #32136928
Korobok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
Cтоимостный оптимизатор при выборке данных делает full table scan. И действительно, делать это выгодней, чем пользоваться индексом. Как заставить его все-таки пользовать индекс. Пусть это будет медленней, но мне так нужно. Хинты не помогают. Есть ли вообще шанс заставить его работать так, как хочу я.
...
Рейтинг: 0 / 0
09.04.2003, 17:53
    #32136940
Блин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
вроде подсказку RULE испоьзуй если очень надо оптимизатор по правилам использовать.
...
Рейтинг: 0 / 0
09.04.2003, 17:54
    #32136945
ora600
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
читай про optimizer_index_caching и optimizer_index_cost_adj в init.ora

например
optimizer_index_caching=95
optimizer_index_cost_adj=5

Хинты ЗАСТАВЛЯЮТ использовать индекс, если это вообще возможно. Или неправильно хинт пишешь, или запрос такой что индекс не используется в любом из рассматриваемых оптимизатором вариантов
...
Рейтинг: 0 / 0
09.04.2003, 17:57
    #32136951
Александр Б
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
Запрос и "неработающие" варианты хинтов - в студию
...
Рейтинг: 0 / 0
09.04.2003, 18:53
    #32137009
Korobok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
to ora600:Эти параметры я уже поставил, 95 и 1 соответственно.Он даже в этом случае не хочет индекс использовать и правильно делает, потому что записей в таблице мало и выгодней делать full scan. Вопрос был, можно ли заставить его пользоваться индексом, даже если, он думает иначе?
...
Рейтинг: 0 / 0
09.04.2003, 19:02
    #32137017
Korobok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
Изначально запрос такой:
Код: plaintext
1.
2.
3.
SELECT  /*+ALL ROWS*/  *
FROM T0 
WHERE f1 =value1 AND f2=value2 ORDER BY f2

ind1 = (f1,f2) - неуникальный индекс.
Пытался делать с хинтом /*+FIRST_ROWS INDEX_ASC("t" "ind1")*/. Тоже TABLE ACCESS FULL.
...
Рейтинг: 0 / 0
09.04.2003, 19:05
    #32137021
ora600
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
/*+ index(ind1 to)*/
...
Рейтинг: 0 / 0
09.04.2003, 19:15
    #32137024
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
>/*+ index(ind1 to)*/

ну уж правильно будет вот так:
/*+ index(to ind1)*/

А индекс в запросе с хинтом не используется потому, что у вас эти поля не NOT NULL, или укажите в запросе:

Код: plaintext
1.
2.
3.
WHERE f1 =value1 
         AND f2=value2 
         AND f1 is not null
         AND f2 is not null
...
Рейтинг: 0 / 0
09.04.2003, 19:30
    #32137034
Korobok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
Все поля в этой таблице описаны при создании как not null.
Добавление is not null не помогло:(
...
Рейтинг: 0 / 0
09.04.2003, 19:34
    #32137035
Korobok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
Когда вместо select * делаю select f1,f2 индекс используется.Как только к этому добавляю еще какое-нибудь поле-full table scan.
...
Рейтинг: 0 / 0
09.04.2003, 19:41
    #32137036
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
а можно полные примеры - запрос, план с костом, результат (если говорите, что небольшой)?
...
Рейтинг: 0 / 0
09.04.2003, 20:24
    #32137054
Korobok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
Чудеса!
Может вы в курсе такого дела?
Вобщем выполняю запрос:
Код: plaintext
1.
2.
3.
4.
SELECT  /*+INDEX(t ind1)*/  *
FROM t 
WHERE f1 ='AAAA' AND f2= 201  
ORDER BY f2;

Его план:
Код: plaintext
1.
2.
3.
SELECT STATEMENT Optimizer=CHOOSE (Cost= 1  Card= 1  Bytes= 126 )
  TABLE ACCESS (BY INDEX ROWID) OF T (Cost= 1  Card= 1  Bytes= 126 )
    INDEX (FULL SCAN) OF IND1 (NON-UNIQUE) (Cost= 26  Card= 1 )

А изначально я выполнял запрос вот такой c синонимом:
Код: plaintext
1.
2.
3.
4.
SELECT  /*+INDEX(t ind1)*/  *
FROM t y0
WHERE y0.f1 ='AAAA' AND y0.f2= 201  
ORDER BY f2;

И вот его план:
Код: plaintext
1.
2.
SELECT STATEMENT Optimizer=CHOOSE (Cost= 1  Card= 1  Bytes= 119 )
  TABLE ACCESS (FULL) OF T (Cost= 1  Card= 1  Bytes= 119 )

Надобно отказываться от синонимов? Но почему его это смущает?
...
Рейтинг: 0 / 0
09.04.2003, 20:28
    #32137055
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
Oracle8i Designing and Tuning for Performance
Release 2 (8.1.6)
Part Number A76992-01

Код: plaintext
1.
2.
You must specify the table to be accessed exactly as it appears in the statement. 
If the statement uses an alias for the table, then use the alias rather than the 
table name in the hint
...
Рейтинг: 0 / 0
09.04.2003, 20:30
    #32137056
Korobok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
Спасибо огромное!!!
...
Рейтинг: 0 / 0
09.04.2003, 22:31
    #32137092
killed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизатор всегда прав?
А в чем смысл обязательного использования индекса?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / оптимизатор всегда прав? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]