使用python从PostgreSql中选择大量行的速度非常慢

使用python从PostgreSql中选择大量行的速度非常慢,python,sql,postgresql,Python,Sql,Postgresql,我正在尝试使用python执行一个select查询,它有超过200000个结果/行。输出200000行的同一查询在DB_引擎(Dbeaver)上大约需要10-15秒,但在尝试使用python执行时,大约需要6分钟。我使用的是psycopg2,SQLALCHEMY引擎 engine = create_engine(SQLALCHEMY_DATABASE_URI, poolclass=NullPool) conn = engine.raw_connection() cursor = conn.cur

我正在尝试使用python执行一个select查询,它有超过200000个结果/行。输出200000行的同一查询在DB_引擎(Dbeaver)上大约需要10-15秒,但在尝试使用python执行时,大约需要6分钟。我使用的是psycopg2,SQLALCHEMY引擎

engine = create_engine(SQLALCHEMY_DATABASE_URI, poolclass=NullPool)
conn = engine.raw_connection()
cursor = conn.cursor()
cursor.execute(query)
有谁能建议将其优化到Dbeaver输出时间级别的方法吗

尝试的其他方法:

  • 第1部分:

     df = pd.DataFrame()  
     dfl = []
     for chunk in pd.read_sql_query( query, con=engine ,chunksize=5000):
       print('chunk from PSQL', chunk)
     # Start Appending Data Chunks from PSQL Result set into List
       dfl.append(chunk)
     # Start appending data from list to dataframe
       df = pd.concat(dfl, ignore_index=True)
    
第2部分:

    with tempfile.TemporaryFile() as tmpfile:
        copy_sql = "COPY ({query}) TO STDOUT WITH CSV {head}".format(
            query=query, head="HEADER"
        )
        conn = engine.raw_connection()
        cur = conn.cursor()
        cur.copy_expert(copy_sql, tmpfile)
        tmpfile.seek(0)
        df = pd.read_csv(tmpfile)
        tmpfile.close()

对于“第2部分”,每一步花费了多少时间?dbeaver是读取输出,还是只读取N行并停止?@jjanes对于第2部分,在copy_expert之后,时间仍然很长,没有多少改进或任何改进。是的,没错,Dbeaver只读取很少的数据rows@jjanescan您建议如何使用py更快地获取200000多行。使用EXPLAIN ANALYZE运行查询需要多长时间?