如何加快MySQL(InnoDB)插入速度?

时间:2018-12-10 18:14:33

标签: python mysql

我有很多文件需要解析并插入到表中。这是有问题的桌子:

enter image description here

有问题的文件是20.4MB,有81,963行。有较大的文件(最大40.xMB)。这是我在做什么:

self.ingester.cursor.execute('''
insert into microsoft_products (bigid_sku, md5_hexdigest, content_type, locale)
values (\'{}\', \'{}\', \'{}\', \'{}\')
'''.format(BigId_Sku, md5_hexdigest, content_type, locale))

以下是几行的经过时间:

line: 6400 | elapsed time: 519.91
line: 6401 | elapsed time: 519.99
line: 6402 | elapsed time: 520.07
line: 6403 | elapsed time: 520.16
line: 6404 | elapsed time: 520.24
line: 6405 | elapsed time: 520.32

注释掉插入语句后

line: 6400 | elapsed time: 0.81
line: 6401 | elapsed time: 0.81
line: 6402 | elapsed time: 0.81
line: 6403 | elapsed time: 0.81
line: 6404 | elapsed time: 0.81
line: 6405 | elapsed time: 0.81

控制流程如下:

for file in files:
  open file
    for line in file:
      do stuff
      execute insert

commit

对于数据库,我非常幼稚。有没有办法加快速度?

1 个答案:

答案 0 :(得分:1)

根据@FrankerZ的建议,您可以批量插入。

在文件中循环浏览时,为批处理插入生成值。

SQL批处理插入基本上如下:

INSERT INTO table (col1, col2) VALUES (r1c1, r1c2), (r2c1, r2c2)...

其中r =行,c =列。

根据您一次插入的数据量,可能需要增加max_allowed_pa​​cket全局变量。

数据库插入通常很好且快速,因此您的瓶颈在于您要为每一行执行插入操作,因此对@FrankerZ建议为+1。