【发布时间】:2020-04-26 09:05:17
【问题描述】:
我正在使用来自 psycopg2 的 copy_expert 来使用 特定 查询从表中读取(大量)数据,因为我不需要整个表。它可以像这样正常工作:
s_buf = io.StringIO()
conn = self.conn
cur = conn.cursor()
query = f"""
copy
(select {",".join(columns)} from {self.table}
where symbol in {tuple(data)})
to STDOUT WITH (FORMAT csv, DELIMITER '\t')
"""
cur.copy_expert(query, s_buf, size=8192)
s_buf.seek(0)
return list(csv.DictReader(s_buf, delimiter="\t", fieldnames=columns))
这里,data 是一个包含 150 个值的列表。结果输出有 800.000 行,这并不多。但是,copy_expert 查询需要将近 50 秒,这太慢了。我知道从 SQL 读取数据的速度通常比这快得多,并且在 dBeaver 中进行查询也快得多。我怎样才能更快地读取数据?我可以以某种方式利用线程/池查询吗?我应该向表中添加索引以加快查询速度吗?
感谢任何帮助或 cmets。
【问题讨论】:
标签: python postgresql performance psycopg2