Лучше сделать 1 запрос или много запросов к postgresql? - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть класс DB, который обрабатывает все эти курсоры, соединения и т. Д. И у меня есть 3 метода:

return_all_records: (SELECT * FROM TABLE)

count_of_records: (SELECT COUNT(*) FROM TABLE)

и return_record_by_pk: (SELECT * FROM TABLE WHERE pk=?)

Я должен взять каждую строку и выполнить операции с данными.Лучше сделать 1 большой запрос к БД или много маленьких запросов?

PS.У меня действительно много записей в БД.Что-то вроде 10 ^ 8.Это не очень легко получить их один раз

for record in DB.return_all_records(): # 1 big query
     #code

for pk in range(DB.count_of_records()):
    DB.return_record_by_pk(pk) #small queries

1 Ответ

1 голос
/ 29 сентября 2019

Это очень сильно зависит от базового драйвера базы данных.Вместо того, чтобы извлекать все записи одновременно, вы должны / можете рассмотреть возможность ограничения количества строк, возвращаемых с помощью условия where в SQL, чтобы указать «начальную строку» и «конечную строку».Затем вы можете скользить, например, 2000 строк за раз по вашим данным.Обязательно сортируйте данные, используя order by, так как в противном случае возвращаемые данные будут / могут отличаться.В зависимости от базы данных, которую вы используете, лимит имеет разный синтаксис (например, rownum в Oracle, комбинация limit и offset при использовании MySQL, ...).В зависимости от столбца, который вы используете для сортировки (и если он проиндексирован или нет), сортировка может оказать огромное влияние на время выполнения, и выборка «окон» из середины или конца таблицы может замедлиться

...