sql server执行更新需要更多时间

时间:2016-05-02 12:21:55

标签: sql sql-server sql-server-2008

我有两个表(UserTable和UserProfile)和结构:

create table userTable(
id_user int identity(1,1) primary key , 
Name varchar(300) not null , 
Email varchar(500) not null , 
PasswordUser varchar(700) not null,
userType int ,
constraint usertype_fk foreign key(userType) REFERENCES userType(id_type)
on delete set null
)

和userPtrofile:

    create table UserProfile(
    id_profile int identity(1,1) primary key , 
    ClientCmpName varchar(300) null,
    Clientaddress varchar(500) null,
    phone varchar(50) null,
    descriptionClient varchar(400) null,
    img image null,
    messageClient text , 
    fk_user int ,
    constraint fkuser foreign key(fk_user) references userTable(id_user) 
    on delete cascade  
    )

我正在使用SQL Server 2008。 问题是当我更新记录执行加载而不执行 这是示例查询:

update UserProfile set messageClient=N'010383772' where fk_user=2;

截图

enter image description here

5 个答案:

答案 0 :(得分:1)

如果您担心此查询的效果:

require_relative "./B/X"
    module A
       class test
       include B        
       def        
          puts self.method("testx")
       end
    end
end

然后索引将非常有用:

update UserProfile
    set messageClient = N'010383772'
    where fk_user = 2;

这应该使查询几乎是即时的。

注意:索引可能会降低插入和其他操作的速度。这通常不是一个大问题,并且在外键列上有索引很常见。

答案 1 :(得分:0)

愚蠢的问题,您为什么要尝试根据[userType]值进行更新?

update UserProfile set messageClient=N'010383772' where fk_user=2;

您不希望根据其ID(这是一个主键,在一个特定的[UserProfile]上更新此值,因此会更快)

UPDATE [UserProfile] 
SET [messageClient]='010383772' 
WHERE id_profile=2;

可能性能问题是由于您的UPDATE尝试使用此特定[UserProfile]值更新所有UserType条记录...?

或者我错过了您尝试做的事情(以及您尝试更新的记录数量)。

答案 2 :(得分:0)

也许你已经在另一个进程(也许是另一个查询编辑器页面)的表上启动了一个事务(BEGIN TRANSACTION),直到你不停止该事务,该表将无法用于更新。 检查变量select @@ trancount,或尝试回滚已经进行的更新(ROLLBACK TRANSACTION)。 还要检查是否可以更新其他表而不会出现问题。

答案 3 :(得分:0)

查询是否曾执行过?这似乎是一个僵局。你应该 某个过程open the activity monoitorcheck if your query is blocked

在这种情况下,您应该终止阻止查询。

答案 4 :(得分:0)

感谢您试图帮助我 我的问题修复了问题是另一个查询编辑器页面,因为我使用asp.net和另一个页面我使用相同的记录来更新相同的记录,当我停止asp.net项目,然后查询成功