powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ускорить запрос по бооооольшой таблице.
11 сообщений из 11, страница 1 из 1
Ускорить запрос по бооооольшой таблице.
    #39781983
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Имеется огромная таблица.

Требуется выбрать данные из этой таблицы, связав ее с более мелкой.



При JOIN в плане вложенные циклы.



Возможно ли как-то от них избавиться?




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
explain
    select mt.guid, bt.data
    from big_table bt
    join my_table mt on mt.guid = bt.id
;




"Nested Loop  (cost=0.57..2553269179.78 rows=486731939864 width=61)"
"  ->  Seq Scan on my_table mt  (cost=0.00..17997.62 rows=338562 width=16)"
"  ->  Index Scan using big_table_id_idx on big_table bt  (cost=0.57..6731.57 rows=80989 width=61)"
"        Index Cond: (cardtype_id = mt.guid_result_coupon)"
...
Рейтинг: 0 / 0
Ускорить запрос по бооооольшой таблице.
    #39781985
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и как можно ускорить данный запрос?

hash join в память не поместится наверное....
...
Рейтинг: 0 / 0
Ускорить запрос по бооооольшой таблице.
    #39781997
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ишу информацию, пока ничего не нашел, как ускорить
...
Рейтинг: 0 / 0
Ускорить запрос по бооооольшой таблице.
    #39782058
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ,

начните с вопроса зачем вам порядка полутриллона записей в результате одного запроса. Что с ними делать дальше?
...
Рейтинг: 0 / 0
Ускорить запрос по бооооольшой таблице.
    #39782066
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теоретически (сам работаю с Oracle), добавив колонки в индекс, можно избежать обращения ко второй таблице. Т.е index scan заменить на https://www.postgresql.org/docs/10/indexes-index-only-scans.html

Как это должно выглядить в плане PostgreSQL на память не помню.
...
Рейтинг: 0 / 0
Ускорить запрос по бооооольшой таблице.
    #39782073
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УткъНу и как можно ускорить данный запрос?

hash join в память не поместится наверное....

1)показать explain (analyze, costs, buffers, timing) Этого запроса чтобы увидеть реальные цифры

2)попробовать сделать
set work_mem to '8GB';
explain Этого же запроса

3) mt(guid) индекс есть?

Особо не увидев итоги этих 3 попрыток - ничего не посоветуешь.


PS: попробовать на 11 версии сделать (хотя под такой план и 9.6 хватит) поставив достаточное количество параллельных обработчиков.
...
Рейтинг: 0 / 0
Ускорить запрос по бооооольшой таблице.
    #39782103
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MelkijУткъ,

начните с вопроса зачем вам порядка полутриллона записей в результате одного запроса. Что с ними делать дальше?

результат запроса вставляется в новую таблицу.
...
Рейтинг: 0 / 0
Ускорить запрос по бооооольшой таблице.
    #39782105
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukУткъНу и как можно ускорить данный запрос?

hash join в память не поместится наверное....

1)показать explain (analyze, costs, buffers, timing) Этого запроса чтобы увидеть реальные цифры

2)попробовать сделать
set work_mem to '8GB';
explain Этого же запроса

3) mt(guid) индекс есть?

Особо не увидев итоги этих 3 попрыток - ничего не посоветуешь.


PS: попробовать на 11 версии сделать (хотя под такой план и 9.6 хватит) поставив достаточное количество параллельных обработчиков.


explain analyze показать невозможно, т.к. запрос выполняется бесконечно долгое клоичество времени.

set work_mem to '8GB' уже сдалал, explain такой же.

индекс есть.


Версия 9.4
...
Рейтинг: 0 / 0
Ускорить запрос по бооооольшой таблице.
    #39782106
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevТеоретически (сам работаю с Oracle), добавив колонки в индекс, можно избежать обращения ко второй таблице. Т.е index scan заменить на https://www.postgresql.org/docs/10/indexes-index-only-scans.html

Как это должно выглядить в плане PostgreSQL на память не помню.


это не вариант, там колонок больше выводится чем я привел, для примера запрос укоротил, убрав большую часть колонок.
...
Рейтинг: 0 / 0
Ускорить запрос по бооооольшой таблице.
    #39782111
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как временное решение добавил лимит и проверку на существующие записи:


INSERT INTO all_table
select mt.guid, bt.data
from big_table bt
join my_table mt on mt.guid = bt.id
WHERE guid NOT IN (select guid FROM all_table)
LIMIT 10000



При определенном количестве LIMIT вложеные циклы превращаются в хэш джоин.



Но это решение как-то кустарно выглядит

Есть ли еще какие-нить варианты?
...
Рейтинг: 0 / 0
Ускорить запрос по бооооольшой таблице.
    #39782173
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ,

покажите explain analyze варианта с hash join и

Код: sql
1.
2.
explain select * from big_table;
explain select distinct cardtype_id from big_table




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


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