每天结帐时往另一个数据库导数据,导数据时速度很慢,占用了整个存储过程执行的一半时间,但是单独把这几条语句单独拿出来执行时,速度很快,不到两秒钟。
a、b、c三个表,在开始执行时先往这三个表写了一部分数据,然后再导数据。
insert a(字段1,字段2)select 字段1,字段2 from a
insert b(字段1,字段2)select 字段1,字段2 from b
insert c(字段1,字段2)select 字段1,字段2 from c
--导数据
insert wz.dbo.a(字段1,字段2)select 字段1,字段2 from a where bh in(select bh from djb where bz<>'n')
insert wz.dbo.b(字段1,字段2)select 字段1,字段2 from b where bh in(select bh from djb where bz<>'n')
insert wz.dbo.c(字段1,字段2)select 字段1,字段2 from c where bh in(select bh from djb where bz<>'n')
bh用的聚集索引,两个数据库用的一样的索引。

解决方案 »

  1.   

    插入速度慢的原因如下:
    1.硬件设施不足.
    2.太多的索引.
    3.太多的表连接.
    4.插入大文本(如image,text...)
      

  2.   

    对djb表的 bz 列设置索引.如果不是必要,bh表不要设置索引,特别是不要设置聚集索引.
      

  3.   

    我觉得原因就是为了提高查询速度建立了过多的索引,这样降低了插入和更新的效率。
    例如查询时使用了
    select * from table where Upper(col) = 'A'
    这样我们就不得不建立Upp(col)作为索引,这就是我们需要避免的。
      

  4.   


    可以在stored procedure中print出来每个语句执行时间。
    还有,在什么地方运行stored procedure?是否需要考虑网络上时间消耗。