在MySQL中快速插入10亿行

时间:2017-08-03 02:28:02

标签: python mysql sql

我目前正在尝试在MySQL表中插入大约10亿行数据。我从.JSON文件的目录中提取数据,其中每个.JSON文件包含~200K行。总共有5K个文件。

我目前正在做的是,浏览每个文件并创建一个包含我想要插入的行的元组。我将这个元组放在一个列表中,在完成整个JSON文件之后,我在MySQL中插入行列表。这比一次将每行插入SQL更快,但这仍然需要3天时间,而且我没有时间。

我最初创建了一个列表,每个包含200,000,000行(生成速度很快),但在MySQL中插入时间太长。这就是为什么我不仅要插入每200,000行。有没有人对如何提高速度有任何建议?

path = *path to my file*
for filename in glob.glob(os.path.join(path, '*.JSON')):
    myList = []
    with open(filename) as json_data:
        j = json.load(json_data)
        for i in j["rows"]:
            name = i["values"][0][0]
            age = i["values"][0][1]
            gender = i["values"][0][2]
            data = (**None**,name,age,gender)
            myList.append(data)
        cursor = conn.cursor()
        q = """INSERT INTO nordic_data values (%s,%s,%s,%s)"""
        cursor.executemany(q, myList)
        conn.commit()

1 个答案:

答案 0 :(得分:1)

有许多潜在的东西,但有一些想法浮现在脑海中:

  1. 将每个X插入包装到事务中。
  2. 从表中删除索引,插入X行,然后重新创建索引。
  3. 插入必须更新索引,因此每个插入都在修改表上的索引。