Раз в год-два мне приходится вспоминать, что Python — не C++.
В этот раз я наткнулся на случай, когда отформатировать и склеить колонки результата запроса на стороне PostgreSQL и распарсить Python-ом оказалось эффективнее, чем запрашивать колонки как отдельные значения.
Конкретнее, при переходе от этого запроса:
SELECT * FROM o_relations ORDER BY id DESC LIMIT %(limit)s
к этому:
SELECT CONCAT(entry_id::text, '|', tag_id::text) AS ids FROM o_relations ORDER BY id DESC LIMIT %(limit)s
скорость извлечения данных увеличилась примерно в 4 раза.
Причиной тому тяжёлая конвертация данных из формата С в формат Python внутри Psycopg.
За подробностями можно сходить ко мне в блог: https://tiendil.org/ru/posts/fun-case-of-speeding-up-data-retrieval-with-psycopg