使用php将繁重的excel导入mysql

使用php将繁重的excel导入mysql,php,mysql,excel,optimization,import,Php,Mysql,Excel,Optimization,Import,我有一张excel表格,其中包含类似于这个例子的数据。如果表格有“city”和“person name”列。所以每次我们需要检查city表(mysql)中是否存在该城市,如果不存在,则会在city表中为city插入新行,同样,如果person表(mysql)中不存在,也会检查person name然后我们需要将人名保存在person表中。 那么,在上面解释的场景中,使用php将至少2gb的繁重excel文件导入mysql的最佳方法是什么呢?这样,在服务器上执行的查询就更少,服务器上的负载也更少,

我有一张excel表格,其中包含类似于这个例子的数据。如果表格有“city”和“person name”列。所以每次我们需要检查city表(mysql)中是否存在该城市,如果不存在,则会在city表中为city插入新行,同样,如果person表(mysql)中不存在,也会检查person name然后我们需要将人名保存在person表中。 那么,在上面解释的场景中,使用php将至少2gb的繁重excel文件导入mysql的最佳方法是什么呢?这样,在服务器上执行的查询就更少,服务器上的负载也更少,执行也只需几秒钟。
请为我推荐上述场景的优化解决方案

对于需要“正常化”数据的高速摄取,分两步执行(将原始数据加载到临时表后):

首先,添加新值(在本例中为
host\u name
):

然后抓取主机id以放入事实表:

# Also not in the main transaction, and it should be with autocommit = ON
# This multi-table UPDATE sets the ids in Staging:
UPDATE   HostNorm AS n
    JOIN Staging AS s  ON s.host_name = n host_name
    SET s.host_id = n.host_id

你看了什么?有很多方法可以解决这个问题,你需要从哪里入手,看看问题出在哪里不可能有人提供一个完整的解决方案不明白为什么你不导入jus onceHi Mike,你能为我提供一种更好的方法吗?它可以减少查询,快速执行@MikeMillerHi Dagon,导入一次不是一个问题,我希望脚本在更短的时间内执行,查询更少excel中每行的列将首先检查到表中,无论其是否存在,如果不存在,则只插入新记录,每列都与不同的表相关联。那么对此的优化解决方案是什么。我最初不感兴趣在使用脚本设置时间限制(0)时@Dagon请不要向程序员那样交叉发帖
# Also not in the main transaction, and it should be with autocommit = ON
# This multi-table UPDATE sets the ids in Staging:
UPDATE   HostNorm AS n
    JOIN Staging AS s  ON s.host_name = n host_name
    SET s.host_id = n.host_id