Страница 1 из 1

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

Добавлено: 07 дек 2004, 15:26
Chester
Господа, не обессудьте :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 минут.

Подскажите плз., можно ли каким-то образом ускорить процесс?????
З.Ы. Все индексы подняты...

Добавлено: 07 дек 2004, 15:31
DeeJayC
pk, index?

Добавлено: 07 дек 2004, 15:40
Chester
DeeJayC писал(а):pk, index?
Да есть все, даже статистика собрана.

Добавлено: 07 дек 2004, 22:10
AiK
Планы запросов надеюсь в Oracle есть? Там могут крыться ответы на вопросы.

Добавлено: 09 дек 2004, 12:59
DeeJayC
AiK писал(а):Планы запросов надеюсь в Oracle есть? Там могут крыться ответы на вопросы.
Есть.

Добавлено: 09 дек 2004, 16:04
AiK
Видимо вопрос уже отсох сам собой. Кстати, скорость может быть разной, потому что в одном случае испульзуется кластерный индекс, а в другом - нет.

Добавлено: 29 дек 2004, 02:26
Naeel Maqsudov
В Oracle начиная с 8i есть два вида индексов. Обычный (древовидный) и битовый (bitmap index)

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

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

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