2010-03-18 81 views
1

我在VB.NET中女巫進口商從SQLServer的獲取數據throught ADSL連接的遠程MySQL服務器的插入這個數據。優化插入

在第一時間,它像200分的記錄,但現在有超過500.000記錄,它像消費出口11小時所有的數據,這是壞的,壞veryyy。我需要優化我的進口商,女巫現在獲取數據到一個數據表他們我有一個功能女巫與循環(行到行)插入數據與「插入」查詢... 這樣的:

  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 

任何想法或建議嗎? 非常感謝

回答

3
  1. 在循環之前創建命令,添加參數並準備命令(Prepare方法)。然後,在循環中,設置的參數值和執行命令
  2. 執行指令的交易,由1000批次左右的命令

編輯:我只是你使用MySQL實現...所以除非你使用InnoDB表,否則你不能使用事務。無論如何,你仍然可以使用我的第一個建議,以便使該命令只有一次

+0

安永準備!感謝您的回答! 但準備的方法,會變成我的應用程序更快? 是的......我的表類型是MyISAM的,但我可以改變它,如果它會代表成爲我的應用程序速度更快。 謝謝! – ikerib 2010-03-22 09:56:55

+0

是的,事先準備好聲明可能會提高性能(至少略微)。我對交易不太確定,您必須嘗試... – 2010-03-22 10:36:49