sqlcommand执行sql语句的效率问题
场景:SQL SERVER数据库,在500万行数据左右的一个表里更新和删除数据
当前使用方案:
1、插入数据使用SqlBulkCopy,非常快,插1000条数据一般只要一二十毫秒。
2、更新/删除方案一:每一条数据都拼成update / delete table_name ... where ..的语句用sqlcommand执行,这种效率非常低,已弃用
3、更新/删除方案二:多条数据的更新拼成以下语句然后用sqlcommand执行(因为执行长度受8000的限制,一次最多也就更新几十到一百多行数据,一千多行数据要执行十多次):
update a
set a.f_2 = b.f_2
from (
select 'x' as f_1, 'y' as f_2
union select 'a', 'b'
union select 'c', 'd'
......
)b
where a.f_1 = b.f_1
这样更新数据会比方案一快很多,删除数据也是类似处理,但是更新几百条和删除几百条数据一共一千多行也还是要2500毫秒左右(注意,是在500万数据里更新一千多行,如果表的数据少,肯定不会这么慢)。索引方案确定没改善的空间,分析过所有更新和删除用的条件都使用了索引进行检索。
有哪位大牛有更好的解决方案,望不吝赐教(本人c#和sql server都是半桶水,哈哈)