在 PostgreSQL 上执行大量类似 SELECT 查询的最有效方法是什么?
The most efficient method of performing a large number of similar SELECT queries on PostgreSQL?
我有一组大的 tables,每个都有很多记录。我正在编写一个 Python 程序,该程序 SELECT
s 来自这些 tables 的大量记录,基于这些记录中多个列的值。
本质上,这些将是大量以下形式的查询:
SELECT <some columns> FROM <some table> WHERE <column1=val1 AND column2=val2...>
每个 table 都有一组不同的列,但上面的 SELECT
公式成立。
默认情况下,我打算通过 psycopg2
PostgreSQL 数据库驱动程序 运行 所有这些查询,每个查询都作为一个单独的查询。但我想知道是否有更有效的方法来解决这个问题,因为会有大量此类查询 - 数千或更多。
如果所有查询的 SELECT
列表条目都相同(相同的条目数和相同的数据类型),您可以使用 UNION ALL
组合多个这样的查询。这不会减少数据库的工作量,但会减少客户端-服务器往返次数。这可能是一个巨大的改进,因为对于短查询来说,网络延迟通常是主要成本。
如果您的所有查询都有不同的 SELECT
列表,您将无能为力。
我有一组大的 tables,每个都有很多记录。我正在编写一个 Python 程序,该程序 SELECT
s 来自这些 tables 的大量记录,基于这些记录中多个列的值。
本质上,这些将是大量以下形式的查询:
SELECT <some columns> FROM <some table> WHERE <column1=val1 AND column2=val2...>
每个 table 都有一组不同的列,但上面的 SELECT
公式成立。
默认情况下,我打算通过 psycopg2
PostgreSQL 数据库驱动程序 运行 所有这些查询,每个查询都作为一个单独的查询。但我想知道是否有更有效的方法来解决这个问题,因为会有大量此类查询 - 数千或更多。
如果所有查询的 SELECT
列表条目都相同(相同的条目数和相同的数据类型),您可以使用 UNION ALL
组合多个这样的查询。这不会减少数据库的工作量,但会减少客户端-服务器往返次数。这可能是一个巨大的改进,因为对于短查询来说,网络延迟通常是主要成本。
如果您的所有查询都有不同的 SELECT
列表,您将无能为力。