Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос с большими таблицами / 5 сообщений из 5, страница 1 из 1
18.08.2020, 07:17
    #39990442
kate.shest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большими таблицами
Здравствуйте.
Есть запрос вида
Код: plsql
1.
2.
3.
4.
5.
6.
insert /*+ append parallel(16) ENABLE_PARALLEL_DML*/into tab
select *
from clients c,
left join tab1 on c.id = tab1.id
left join tab2 on c.id = tab2.id
.............



То есть, таблица клиентов связывается еще с 5 таблицами по айди клиента. В таблице клиентов айди уникально, в других таблицах не обязательно. Все бы ничего, но таблицы огромны (каждая не менее 35 миллионов записей), в таблицах преобразования, есть пивоты. Запрос выполняется долго. Мне дали задание оптимизировать его. Индексы есть. Я понимаю, что вопрос общий, но я и жду общего ответа, направление куда копать. Есть ли какой то алгоритм работы с большими таблицами. Я придумала такой способ:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
v_parts = 10;
for i in 0..(v_parts-1) loop
     insert /*+ append parallel(16) ENABLE_PARALLEL_DML*/into tab
     select *
     from (select * from clients c where mod(c.id, v_parts) = i) c,
     left join (select * from tab1 where mod(tab1.id, v_parts) = i) tab1 on c.id = tab1.id
     ...........................................
     commit;
end loop;


Выполняется быстрее на 10 минут из 50, это как бы ни о чем.
Единственный плюс: чаще коммит.
Можно ли партицировать таблицу в процедуре?
Или есть другие способы работы с большими таблицами?
Буду рада советам.
...
Рейтинг: 0 / 0
18.08.2020, 07:41
    #39990446
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большими таблицами
kate.shest
Можно ли партицировать таблицу в процедуре?

нет, нельзя

kate.shest
Или есть другие способы работы с большими таблицами?

Без планов выполнения вам никто помочь здесь не сможет.
...
Рейтинг: 0 / 0
18.08.2020, 09:34
    #39990463
Бельфя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большими таблицами
kate.shest
Здравствуйте.
таблицы огромны (каждая не менее 35 миллионов записей), в таблицах преобразования, есть пивоты

Что значит в таблицах "есть пивоты"? Это таблицы или всё же представления? 35 миллионов это не много в современных реалиях.
...
Рейтинг: 0 / 0
18.08.2020, 12:01
    #39990500
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большими таблицами
kate.shest,

Покажите план запроса, надо смотреть на что уходит основное время его выполнения.
...
Рейтинг: 0 / 0
20.08.2020, 01:06
    #39990987
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с большими таблицами
kate.shest

Код: plsql
1.
2.
3.
4.
for i in 0..(v_parts-1) loop
     insert /*+ append parallel(16) ENABLE_PARALLEL_DML*/into tab
     commit;
end loop;


По мнению Тома Кайта, такой подход к транзакциям чрезвычайно вреден.
Мало того, ускорение тут, скорее всего, мнимое.

Перед большими вставками индексы можно отключать (тем более, как я понимаю, тут некие накопительные аналитические выборки, целостность контролировать можно и без constraints), а после вставки ребилдить.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос с большими таблицами / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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