MySQL Workbench表数据导入向导速度极慢

问题描述 投票:0回答:7

我需要将一个包含 2000 万行和 2 列的 csv 文件导入数据库,但是当我尝试使用 MySQL Workbench 的数据导入向导执行此操作时,速度非常慢,可能需要 1 个月才能完成,查看进度条。

我希望必须有一些更快的方法来做到这一点。

mysql csv import mysql-workbench
7个回答
28
投票

始终使用

Load Data Infile
作为大量数据的首次尝试。

Mysql 手册页面Load Data Infile

为这个问题写了几个答案,但为了进行同行比较,请参阅这个人的问题和我的答案以及他对 Workbench 与 Load Data Infile 的时间比较。


4
投票

这是一个替代方案。 将 CSV 数据转储到 SQL 脚本中,您需要为此编写一些代码。 基本上,您的 csv 数据将被转换为类似于以下命令

INSERT INTO TABLE_NAME values(1,2),(1,3),....;

现在使用 MySQL shell 脚本并使用
SOURCE
命令
mysql> 源 C:/Users/Desktop/sql 脚本/script.sql
与直接导入数百万条记录的 CSV 相比,您的数据导入速度会更快。


3
投票

如果您不想编写代码,我建议尝试另一个免费的 GUI 客户端,例如 HeidiSQL。它导入 CSV/文本文件的速度比 MySQL Workbench 快得多。


1
投票

我在 MySQL Workbench 上也遇到了类似的问题。 我找到的替代方案是 Toad for MySQL (https://www.toadworld.com/m/freeware/1469)

我需要 40 分钟才能通过 MySQL 管理连接到远程 MySQL 服务器。在 MySQL 服务器本身上,上传需要几分钟。使用蟾蜍,我可以连接到远程服务器并在几分钟内上传。我确实尝试过 HeidiSQL,但发现它导入起来不太友好。


1
投票

总是更喜欢load data infile来导入数据集,不方便的是=>你必须在导入之前创建一个表结构。导入向导允许您直接从 csv 或 json 即时创建新表。

我认为这种缓慢的原因是:workbench 使用 python 作为导入向导。可以看到导入向导出现错误时的日志中,是python的控制台日志

如果您出于任何原因不想创建结构,您可以启动该进程,它将从 csv 创建表,然后终止该进程。然后,删除表中的所有内容并将数据加载到文件中。这是一种丑陋的“黑客”,但它对我有用。


0
投票

您可以使用以下Python代码将csv文件转换为sql插入文件:

import csv

def csv_to_sql_insert(csv_filename, table_name):
    with open(csv_filename, 'r') as csv_file:
        csv_reader = csv.DictReader(csv_file)
        columns = csv_reader.fieldnames

        for row in csv_reader:
            values = [f"'{row[col]}'" if isinstance(row[col], str) else str(row[col]) for col in columns]
            sql_insert = f"INSERT INTO {table_name} ({', '.join(columns)}) VALUES ({', '.join(values)});"
            print(sql_insert)

# Replace these values with your actual CSV file and desired table name
csv_filename = 'data.csv'
table_name = 'your_table'

csv_to_sql_insert(csv_filename, table_name)

-2
投票

我对非常快速的导出/导入向导的建议是使用 MySQL for Excel

这是无痛且快速的,您不需要解决所有必须解决的错误和调整

LOAD DATA INFILE

© www.soinside.com 2019 - 2024. All rights reserved.