插入时,Sql select在表格上很慢

时间:2013-04-15 23:08:41

标签: sql select indexing

我有一个后台作业(C#控制台应用程序),它在product_titleParts表中连续插入数据。只需这个工作从产品表中选择前100个产品,将标题分成部分并插入到product_titleParts表中。

此表有一个名为“TitlePart”的索引列

另一方面,当我尝试从这个表中选择SQL查询需要永远。 如果我在一段时间后查询停止控制台应用程序需要0秒。一旦我再次启动控制台应用程序,请再次选择无响应的查询。

在插入另一个作业时从表中选择会导致任何缓慢? 我在选择中使用nolock但没有帮助。

任何想法?

我在控制台应用上的代码:

if not exists(select 1 from product_titleParts where productid = @productid
and UserId = @userid and titlePart = @titlePart)
begin
insert into product_titleParts (userid, productid, titlePart)
VALUES (@userid, @productid, @titlePart)
end

我的选择代码:

select productid from product_titleParts 
inner join products
on products.productid = product_titleParts.productid
where titlePart = @titlePart

1 个答案:

答案 0 :(得分:0)

另一方面(DB / 2)选择插入“海量数据”时出现了同样的问题

我的解决方案是什么:

插入是昂贵的,所以我将它们绑定到一个块,如:

 insert into ...
 values ((a,b,c),(x,y,z), ... )

仅锁定表格一次,例如。 100次插入和索引只能重建一次

还有一点:当您插入(更新)多行时,尝试以独占模式锁定表(取决于DBMS)。你防止了什么称为“锁定升级”

在DB2中使用

   lock table xyz in exclusive mode
   update/insert many rows
   unlock table xyz