优化插入

时间:2010-03-18 16:06:39

标签: .net mysql sql-server

我在VB .Net中做了一个导入器,从SQLServer获取数据,通过远程MySQL服务器中的ADSL连接插入这些数据。

在第一次,它就像200条记录,但现在有超过500.000条记录,它花费了11小时输出所有数据,这很糟糕,非常糟糕。

我需要优化我的导入器,女巫现在将数据转换为数据表,我有一个函数巫婆带循环(行到行)插入数据与“插入”查询... 像这样:

            For Each dr As DataRow In dt.Rows
            Console.Write(".")

            Dim sql As String = "INSERT INTO clientes(id,nombrefis,nombrecom,direccion,codpos,municipio_id,telefono,fax,cif)" & _
                        "VALUES (@id,@nombrefis,@nombrecom,@direccion,@codpos,@municipio_id,@telefono,@fax,@cif)"
            cmd = New MySqlCommand(sql, cnn)
            cmd.Parameters.AddWithValue("id", Int32.Parse(dr("ID EMPRESA").ToString))
            cmd.Parameters.AddWithValue("nombrefis", dr("NOMEMP"))
            cmd.Parameters.AddWithValue("nombrecom", dr("EMPRESA"))
            cmd.Parameters.AddWithValue("direccion", dr("DIRECC"))
            cmd.Parameters.AddWithValue("codpos", dr("CODPOS"))
            cmd.Parameters.AddWithValue("municipio_id", Int32.Parse(dr("CODIGO MUNICIPIO")).ToString)
            cmd.Parameters.AddWithValue("telefono", dr("TELEF"))
            cmd.Parameters.AddWithValue("fax", dr("FAX"))
            cmd.Parameters.AddWithValue("cif", dr("CIF"))
            cmd.ExecuteNonQuery()
        Next

任何想法或建议? 非常感谢

1 个答案:

答案 0 :(得分:3)

  1. 创建命令,添加参数并在循环之前准备命令(Prepare方法)。然后,在循环中,设置参数值并执行命令
  2. 通过批量1000个左右的命令
  3. 执行事务中的命令 编辑:我刚刚意识到你正在使用MySQL ...所以除非你使用InnoDB表,否则你不能使用事务。无论如何,你仍然可以使用我的第一个建议,这样命令只准备一次