如何使MySql插入更有效/更快?

时间:2015-11-03 13:25:45

标签: c# mysql bulkinsert

  

这不重复。

     

@Fubo answer使用忽略“参数”的字符串构建器   功能。这是一种有效的方法,但我想知道是否   类似的方法可以与参数功能一起使用。

     

使用交易(另一种解决方案)似乎同样缓慢。

我正在尝试将200万行加载到表中。这段代码完成了这项工作,但需要30多分钟。

如何让它更快?

我想过可能在内存中创建一个巨大的多重插入语句,然后只调用一次ExecuteNonQuery - 但我不知道该怎么做,因为我使用的是“参数”功能。

        NpgsqlConnection conn = new NpgsqlConnection(connstring);
        conn.Open();
        NpgsqlCommand cmd = new NpgsqlCommand("insert into \"Min_Bar_Price_Data\" values(:SEC_ID, :PX_OPEN, :PX_HIGH, :PX_LOW, :PX_LAST, :PX_VOLUME, :Date)", conn);


        cmd.Parameters.Add(new NpgsqlParameter("SEC_ID", DbType.Int32));
        cmd.Parameters.Add(new NpgsqlParameter("PX_OPEN", DbType.Double));
        cmd.Parameters.Add(new NpgsqlParameter("PX_HIGH", DbType.Double));
        cmd.Parameters.Add(new NpgsqlParameter("PX_LOW", DbType.Double));
        cmd.Parameters.Add(new NpgsqlParameter("PX_LAST", DbType.Double));
        cmd.Parameters.Add(new NpgsqlParameter("PX_VOLUME", DbType.Double));
        cmd.Parameters.Add(new NpgsqlParameter("Date", DbType.DateTime));
        int ID = 0;

        foreach (var d in SortedData)
        {


            cmd.Parameters["SEC_ID"].Value = sec_ID;
            cmd.Parameters["PX_OPEN"].Value = 0.0;
            cmd.Parameters["PX_HIGH"].Value = 0.0;
            cmd.Parameters["PX_LOW"].Value = 0.0;
            cmd.Parameters["PX_LAST"].Value = d.Close;
            cmd.Parameters["PX_VOLUME"].Value = 1.0;
            cmd.Parameters["Date"].Value = d.DT;

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception er)
            {
                Console.WriteLine("ER: " + er.Message);
            }


        }

0 个答案:

没有答案