相关疑难解决方法(0)

COPY如何工作?为什么它比INSERT快得多?

今天,我花了一天时间来改进我的Python脚本的性能,该脚本将数据推送到我的Postgres数据库中.我以前是这样插入记录的:

query = "INSERT INTO my_table (a,b,c ... ) VALUES (%s, %s, %s ...)";
for d in data:
    cursor.execute(query, d)
Run Code Online (Sandbox Code Playgroud)

然后我重新编写了我的脚本,以便创建一个内存文件,而不是用于Postgres的COPY命令,它允许我将数据从文件复制到我的表:

f = StringIO(my_tsv_string)
cursor.copy_expert("COPY my_table FROM STDIN WITH CSV DELIMITER AS E'\t' ENCODING 'utf-8' QUOTE E'\b' NULL ''", f)
Run Code Online (Sandbox Code Playgroud)

这种COPY方法速度惊人.

METHOD      | TIME (secs)   | # RECORDS
=======================================
COPY_FROM   | 92.998    | 48339
INSERT      | 1011.931  | 48377
Run Code Online (Sandbox Code Playgroud)

但我找不到任何关于为什么的信息?它与多线程的工作方式有何不同INSERT,使其更快?

也看到这个基准:

# original
0.008857011795043945: query_builder_insert
0.0029380321502685547: copy_from_insert

#  10 records …
Run Code Online (Sandbox Code Playgroud)

python postgresql sql-insert postgresql-copy

19
推荐指数
2
解决办法
5423
查看次数

标签 统计

postgresql ×1

postgresql-copy ×1

python ×1

sql-insert ×1