使用python从PostgreSql中选择大量行的速度非常慢
我正在尝试使用python执行一个select查询,它有超过200000个结果/行。输出200000行的同一查询在DB_引擎(Dbeaver)上大约需要10-15秒,但在尝试使用python执行时,大约需要6分钟。我使用的是psycopg2,SQLALCHEMY引擎使用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
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)
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运行查询需要多长时间?