Я выполняю следующий запрос для 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, но для получения первых 30000 строк потребовалось более 8 часов (никогда не завершалось), когда запрос выполнялся с использованием psycopg2.