powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / оптимизация алгоритма внесения данных в таблицу
5 сообщений из 5, страница 1 из 1
оптимизация алгоритма внесения данных в таблицу
    #38773988
despair1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть таблица в которой будет около 100к-1кк записей

после запроса пользователя в нее нужно внести до 1к-4к записей, содержащих primary key, часть из которых уже может находиться в таблице

без оптимизации алгоритм типа:
для каждой записи пользователя:
проверить наличие pk в таблице, если нет внести запись в таблицу

выполняется 5 секунд, на полупустой базе данных, как можно оптимизировать его исполнение?
...
Рейтинг: 0 / 0
оптимизация алгоритма внесения данных в таблицу
    #38774067
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
despair1,

При такой постановке вопроса (без каких-либо деталей) едва ли стоит рассчитывать на качественную помощь.
...
Рейтинг: 0 / 0
оптимизация алгоритма внесения данных в таблицу
    #38774277
despair1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ладно попытаюсь спросить более конкретно:

чему пропорционально время выполнения запроса
"select * from table where primary_key == x"

len(table) или lg len(table) или len (x ) ?

чему пропроционально время выполнения запроса:

" select * from temp_table LEFT OUTER JOIN table ON (temp_table.pk == table.pk) where table.pk==NULL "

где pk - primary key

len(table)*len(temp_table) или len(table)+len(temp_table) ?
...
Рейтинг: 0 / 0
оптимизация алгоритма внесения данных в таблицу
    #38774292
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
despair1ладно попытаюсь спросить более конкретно:

чему пропорционально время выполнения запроса
"select * from table where primary_key == x"

len(table) или lg len(table) или len (x ) ?

чему пропроционально время выполнения запроса:

" select * from temp_table LEFT OUTER JOIN table ON (temp_table.pk == table.pk) where table.pk==NULL "

где pk - primary key

len(table)*len(temp_table) или len(table)+len(temp_table) ?

1)для вас на вашем уровне время выполнения "select * from table where primary_key == x" от размера таблицы не зависит и является констаной принимающей 2 занения приблизительно 0.01 ms если нужная строка в памяти и 10ms если нужная строка находится на неперегруженном диске + сетевые расходы если запрос производится по сети (0.2-5ms на запрос)

2)смотря от размера временной таблицы конечно но если он <<< размера основной таблицы то длинна временной таблицы * константу из п1 за вычетом сетевых расходов


если запросы выполняются по сети - то 5секунд на выполнение 2000-8000 запросов вполне нормальный результат.
...
Рейтинг: 0 / 0
оптимизация алгоритма внесения данных в таблицу
    #38774295
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
despair1есть таблица в которой будет около 100к-1кк записей

после запроса пользователя в нее нужно внести до 1к-4к записей, содержащих primary key, часть из которых уже может находиться в таблице

без оптимизации алгоритм типа:
для каждой записи пользователя:
проверить наличие pk в таблице, если нет внести запись в таблицу

выполняется 5 секунд, на полупустой базе данных, как можно оптимизировать его исполнение?

вообще быстрее всего
create temp table ...
copy from stdin to temp table
analyze temp table
insert ... select * from temptable where not exists (select * from table);

как то так...

Это спасет вас от сетевых задержек но если вопрос упирается в доступ к диску то сильно быстрее чем было не станет.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / оптимизация алгоритма внесения данных в таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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