Oracle 9.2 Оптимизация запроса

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
Chester
Сообщения: 60
Зарегистрирован: 06 дек 2004, 10:46
Откуда: Kyiv, Ukraine
Контактная информация:

Господа, не обессудьте :D

Имеетмся 3 таблицы, примерно одинаковых по размеру.

Выборка 1

select t1.name, sum(t2.data)
from table1 t1 left join table2 t2 on t2.reftotable1_ID=t1.ID
group by t1.name

Выборка 2

select t1.name, sum(t3.data)
from table1 t1 left join table3 t3 on t3.reftotable1_ID=t1.ID
group by t1.name

Так вот Выборка 1 отрабатыцвает почти мгновенно, а вот выборка 2 примерно 5-7 минут.

Подскажите плз., можно ли каким-то образом ускорить процесс?????
З.Ы. Все индексы подняты...
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

pk, index?
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Chester
Сообщения: 60
Зарегистрирован: 06 дек 2004, 10:46
Откуда: Kyiv, Ukraine
Контактная информация:

DeeJayC писал(а):pk, index?
Да есть все, даже статистика собрана.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Планы запросов надеюсь в Oracle есть? Там могут крыться ответы на вопросы.
Даже самый дурацкий замысел можно воплотить мастерски
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

AiK писал(а):Планы запросов надеюсь в Oracle есть? Там могут крыться ответы на вопросы.
Есть.
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Видимо вопрос уже отсох сам собой. Кстати, скорость может быть разной, потому что в одном случае испульзуется кластерный индекс, а в другом - нет.
Даже самый дурацкий замысел можно воплотить мастерски
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

В Oracle начиная с 8i есть два вида индексов. Обычный (древовидный) и битовый (bitmap index)

Первый хорош для данных с небольшим числом повторений (например для pk идеально) а второй для значений, которые часто повторяются.

Исполльзовать индекс или нет Oracle часто решает сам, например, для небольших таблиц часто он кладет на индексы, если они помещаются в кеше. Тут только план запроса надо смотреть и ковыряться что и как отработало, а в случае если Oracle не прав - вписать в предложение select так называемые хинты, которые скажут ему, какие индексы тут надо поюзать.

Кроме того есть в sp-файле параметры, изменяющие внутренние алгоритмы, связанные с оптимизацией запросов (по разному (из разных критериев) может вычисляться стоимость запроса). На вскидку не помню, могу посмотреть, если надо.
Ответить