用控制台做数据库的update的时候碰到的大数据量情况

monkeyHere 2012-05-24 05:08:09
之前在sql版问过一个删除重复数据的问题, 后来因为需求关系, 条件复杂不少, 于是写成程序解决
现在遇到的困难是速度太慢了-0-

关键代码如下
DataRow[] dr;
//Table_Cell为需要判断重复数据的列名;sortOrder为排序方式; dt为已经根据要求对数据库数据分组并返回的 datatable
for (int i = 0; i < Table_Cell.Length; i++)
{
dr = dt.Select("Table_Cell='" + Table_Cell[i] + "'", sortOrder);
//第一个数据不删除, 从第二个开始, 如果有重复的数据,设置flag为1
if (dr.Length > 1)
{
for (int j = 0; j < dr.Length - 1; j++)
{
int k = j + 1;
if (dr[k]["Cell_Value"].Equals(dr[j]["Cell_Value"]))
{
//调用updateRowDataFlag方法更新数据库,scon为 sqlconnection值

if (d.updateRowDataFlag(scon,dr[k]["ID"].ToString()))
{
success += 1;
}
total += 1;
Console.WriteLine("处理中, 第" + total + "条数据");
}

}
}
}

数据总量大概有40W条, 现在这样处理, 一秒钟大概是6~8个数据更新,全部完成在13个小时左右

想着有没有办法可以提高效率?

我开始设想, 把 dr[k]["ID"] 这个ID值 全部存放到一个List里面,当取出所有需要更改flag的ID值之后, 再循环进行update;
和同事讨论了一下效率好像差不多
...全文
124 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmhxjjq 2012-05-24
  • 打赏
  • 举报
回复
哦哦。。 也就是说 要保持数据的唯一性啦。

先把所有重复的进行去除。 也就是说就算是更新了的数据,但是有2条相同的也只保留一条。

然后根据主键开始进行筛选, 这个我就不好去说太多了。 数据库里面应该有可以给你进行筛选条件的列把。
monkeyHere 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

你是说删除重复的 还是出现了2,6,7,5就删除掉。
[/Quote]
这个表的作用 是保存修改记录的, 这样说明可能好理解点? 以前的页面代码是把 没有修改的值也保存进来了, 造成现在数据量超大, 所以需要删除掉那些多余的重复数据,但是要保留可能是修改的记录
xmhxjjq 2012-05-24
  • 打赏
  • 举报
回复
按你的说话。 可以考虑写存储过程 或者说在程序里对sql语句进行拼接

还是看后面的判断能不能成功的遍历出来。 如果能的话就好说。 那个去重的函数我也用的不是很清楚。。

这个。 好像有点疼。
我的思路是 把条件进行分类 然后慢慢的读取出来

如果说 你只需要判断一下第一个数字是否相同 那么应该比较好做。


select *from tb_content_userinfo  
where version like '1.%' and
Imei not in (select Imei from tb_content_userinfo group by imei having count(imei)>1) or
imei in (select imei from tb_content_userinfo group by imei,addtime having count(imei)>1 and
addtime>'') and
addtime>''
order by addtime desc


这个是以前的语句。 用来判断用户的。 因为有测试数据在里面。 所以就将出现多次的用户去除掉了。

你可以考虑把like '1.%' 这里改变一下。 然后多次查询。

希望对你有用
xmhxjjq 2012-05-24
  • 打赏
  • 举报
回复
你是说删除重复的 还是出现了2,6,7,5就删除掉。
monkeyHere 2012-05-24
  • 打赏
  • 举报
回复
上面的例子打错, 那个例子是 要删除2和5, 不能删除1,3,4
即只删除后面出现的重复值
如果是
1.0;
2.0;
6.0;
7.0;
3.10
4.0
5.0
则是删除2,6,7,5 保留1.3.4
monkeyHere 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

这个。 如果只是删除或者修改固定数据的话 。 数据库会好一些。
有个函数可以直接看到全部不同的 还是多出来的。 (这个不记得了。。好像是DISTINCT)。
接下来就好做了

如果修改的太多 而且要不一致的话 这个就不清楚。
[/Quote]
因为数据过滤情况比较复杂, 简单来说,是下面的数据
1.0;
2.0;
3.10
4.0
5.0
要删除掉重复的2和4,而不能删除1,3,5
表格的样式是
table_id(数据外链主键) table_cell (页面单元格) value(值)
主键一致的情况下, table_cell 有13个值,value的情况如上面说的例子
所以最后只好写这种程序来进行update
xmhxjjq 2012-05-24
  • 打赏
  • 举报
回复
这个。 如果只是删除或者修改固定数据的话 。 数据库会好一些。
有个函数可以直接看到全部不同的 还是多出来的。 (这个不记得了。。好像是DISTINCT)。
接下来就好做了

如果修改的太多 而且要不一致的话 这个就不清楚。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧