SQLSERVER内存表非常慢

weixin_38048892 2016-06-14 09:23:19
最近测试sqlserver的内存表发现一个问题,如下:
create   table product55(code int not null ,stock_total int  not null,stock_now int  not null,create_time smalldatetime not null,
primary key nonclustered hash(code) with(bucket_count=10000))
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)


 create  proc porc_execute55 
 WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER 
as
BEGIN ATOMIC   
 WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')--本机编译的存储过程不支持begin tran显示的事务提交,所以遇到问题不能rollback,而只能反向写SQL了

  declare @id2 int
 declare @id int=1  
 
while @id<=10000
begin

set @id2=5

update dbo.product55
set stock_now-=1
where code=@id2
  
set @id+=1

end

end


运行存储过程发现一个问题:
存储过程里面是循环执行10000次,按道理来说应该是瞬间完成,但是速度却非常的慢,最快一次也用了两秒钟,
最后找到一个特点:
set @id2=5
update dbo.product55
set stock_now-=1
where code=@id2
即:每次更新的都是同一行数据
如果修改为
set @id2=5+@id
update dbo.product55
set stock_now-=1
where code=@id2
即:每次修改都是不同的行,则就达到效果了,即:瞬间完成

难道,不能反复更新同一行数据么,性能如此低下,还不如不用本地编译的存储过程,速度还快很多很多
...全文
11 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧