powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос с большими таблицами
5 сообщений из 5, страница 1 из 1
Запрос с большими таблицами
    #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
Запрос с большими таблицами
    #39990446
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kate.shest
Можно ли партицировать таблицу в процедуре?

нет, нельзя

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

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

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

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


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