百万级数据插入数据库
数据量很大大概有几百万条,有重复
数据分别为 用户名,密码,性别,年龄 保存在一个txt中(五十多个G) 分别对应着数据库中的表 usermessage中的 username ,pwd, sex,age
密码在插入时需要加密 Encryption(密码);
怎样才能快速插入,我用传统的方法,程序运行了几天了才插入了不到十分之一.
插入后要数据无重复,已username列为准
------解决方案--------------------BULK SQL 插入数据库后再去过滤掉重复的
------解决方案--------------------首先,我们把数据加载到一个DataSet DataSet ds = new DataSet();
private void btLoadData_Click(object sender, EventArgs e)
{
string dataFile = "CustomersData.xml";
ds.ReadXml(dataFile);
bindingSource1.DataSource = ds;
bindingSource1.DataMember = "Customers";
dataGridView1.DataSource = bindingSource1;
}
/// <summary>
/// 使用新的API,批量导入,这个速度很快,大约26毫秒,很显然,这种方式只写一次日志,不会为每一行写日志
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btBCP_Click(object sender, EventArgs e)
{
using (SqlConnection conn = new SqlConnection(GetConnectionString()))
{
SqlBulkCopy bcp = new SqlBulkCopy(conn);
bcp.DestinationTableName = "Customers";
bcp.BatchSize = 100;//这是批尺寸可以调整
for (int i = 0; i < 11; i++)
{
bcp.ColumnMappings.Add(i, i);
}
TimeSpan startTime = System.Diagnostics.Process.GetCurrentProcess().UserProcessorTime;
conn.Open();
bcp.WriteToServer(ds.Tables[0]);