Я выполняю следующий запрос на 489 миллионов строк (102 ГБ) на компьютере с 2 ГБ памяти:
select * from table order by x, y, z, h, j, l;
Я использую psycopg2 с серверным курсором ("cursor_unique_name") и выбираю30000 строк одновременно.
Очевидно, что результат запроса не может остаться в памяти, но мой вопрос в том, будет ли следующий набор запросов таким же быстрым:
select * into temp_table from table order by x, y, z, h, j, l;
select * from temp_table
Это означает, что я буду использовать temp_tableхранить упорядоченный результат и извлекать данные из этой таблицы.
Причина, по которой этот вопрос задается, состоит в том, что выполнение занимает всего 36 минут при ручном запуске с использованием psql, но это заняло более 8 часов (никогда не завершалось)) получить первые 30000 строк, когда запрос был выполнен с использованием psycopg2.