簡體   English   中英

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

[英]How can I speed up my MySQL (InnoDB) inserts?

我有很多文件需要解析並插入到表中。 這是有問題的表:

在此處輸入圖片說明

該文件是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

對於數據庫,我非常幼稚。 有沒有辦法加快速度?

根據@FrankerZ的建議,您可以批量插入。

在文件中的各行之間循環時,請為批處理插入生成值。

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

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

其中,r =行,c = col。

根據您一次插入的數據量,可能需要增加max_allowed_pa​​cket全局變量。

數據庫插入通常很好且快速,因此您的瓶頸是您要對每一行執行插入操作,因此對@FrankerZ建議+1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM