亿级数据表的优化问题
业务是这样的,定期要把最新的数据写到数据库里。表里有一列UpdateStatus,用来设置Archived和Current,每次在写入新数据时,把已有的数据改成Archived,然后新的数据改成Current。
所以每次插入数据的步骤是,
1. 先根据条件把表里对应的数据Update成Archived,
2. 然后Insert新数据
3. 再Update新插入的新数据为Current
用的是批量插入(SqlBulkCopy),数据量少的时候性能还可以。由于需要频繁大批量Insert,所以表没有主键外键,索引加不加好像并没有太大改进。
现在的问题是有的表里有1亿多条数据,其它表里也都是百万级别的,而且一次更需批量插入1千多次,每次Update几乎是都是遍历全表,最少也要4,5分钟,全部做完就要4多千分钟,这个是不能接受的。
有没有高人指点一下?