日期:2014-05-17  浏览次数:20787 次

海量数据如何快速批量导入数据库
本帖最后由 Pc498471249 于 2013-03-27 18:19:14 编辑
如题, 导入之前还需要判断数据是否重复,如果存在重复,则累加它的属性值 ,数据表根据条件分了N张,  表名是动态的。    我原来的做法是, 写一个存储过程,  C#程序里拼接 "exec 存储过程 参数,参数"   这样的字符串,没拼接到500次, 提交一次。    开始导入还算快。   半个小时100W 左右的量,   但是当数据量得到几KW之后,  速度就非常慢了 .  我把存储过程 和 C#的代码晒出来看看, 大家帮忙看看那里可以做优化啊


   private void ImportDataAndInsertData_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog() { Filter = "文本文件|*.txt", Multiselect = false };
            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                t = new Thread(new ThreadStart(() =>
                   {
                       dt.Start();
                       Dispatcher.BeginInvoke(new Action(() => { ImportDataAndInsertData.IsEnabled = false; }));
                       string[] datas = File.ReadAllLines(ofd.FileName,Encoding.Default);             //datas.Length大概在500W-800W左右
                       ofd.Dispose();
                       string[] newdatas = RemoveDup3(datas);  //去掉重复
                       Dispatcher.BeginInvoke(new Action(() => { txtAllCount.Text = "总行数:" + newdatas.Length; }));
                       string sql = string.Empty;  //拼接sql语句
                       for (int i = 0; i < newdatas.Length; i++)
                       {
                           string[] tempstr = newdatas[i].Replace("----", "∽").Split('∽');
                           sql += "exec AddData