PDA

Просмотр полной версии : Oracle 9.2 Оптимизация запроса



Chester
07.12.2004, 15:26
Господа, не обессудьте :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
07.12.2004, 15:31
pk, index?

Chester
07.12.2004, 15:40
pk, index?

Да есть все, даже статистика собрана.

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

DeeJayC
09.12.2004, 12:59
Планы запросов надеюсь в Oracle есть? Там могут крыться ответы на вопросы.

Есть.

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

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

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

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

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