作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个后台作业(C# 控制台应用程序),它在 product_titleParts 表中连续插入数据。这个作业简单地从 products 表中选择前 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
最佳答案
另一方面,我在选择时插入“海量数据”时遇到了类似的问题 (DB/2)
我的解决方案是什么:
插入很贵,所以我把它们绑在一个 block 上:
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
关于Sql select 在表上插入时速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16026117/
我是一名优秀的程序员,十分优秀!