Sql 从CLR存储过程内部插入行的性能
我有一个用C#编写的SP,它可以计算大约200万行。计算大约需要3分钟。对于每一行,结果以三个数字的形式生成。 这些结果被插入到临时表中,然后以某种方式进行处理。 结果以块的形式添加,插入有时需要超过200分钟(是的,超过3小时!)。有时“只”需要50分钟。 我对它进行了修改,结果一直保存在内存中,直到最后,然后在一个事务中的一个循环中转储整个200万。不过,大约需要20分钟。 使用SQL编写的类似循环,事务开始/提交只需不到30秒。 有人知道问题出在哪里吗? 处理200万(因此选择它们等)需要3分钟,将结果插入最佳解决方案需要20分钟。Sql 从CLR存储过程内部插入行的性能,sql,sql-server-2008,clr,database-performance,Sql,Sql Server 2008,Clr,Database Performance,我有一个用C#编写的SP,它可以计算大约200万行。计算大约需要3分钟。对于每一行,结果以三个数字的形式生成。 这些结果被插入到临时表中,然后以某种方式进行处理。 结果以块的形式添加,插入有时需要超过200分钟(是的,超过3小时!)。有时“只”需要50分钟。 我对它进行了修改,结果一直保存在内存中,直到最后,然后在一个事务中的一个循环中转储整个200万。不过,大约需要20分钟。 使用SQL编写的类似循环,事务开始/提交只需不到30秒。 有人知道问题出在哪里吗? 处理200万(因此选择它们等)需要
更新:此表在标识列上有一个聚集索引(以确保在末尾实际追加行),没有触发器,没有其他索引,也没有其他进程访问它 只要我们都很模糊,这里就有一个模糊的答案。如果插入2mil行需要那么长的时间,我将按以下顺序检查四个问题:
没有外键或任何约束,标识列上的聚集索引(确保所有记录都追加到末尾)此表上没有nay类型的触发器,没有其他索引,没有其他进程正在访问此表。这是一个临时表,稍后用于更新原始表中的200万行。