SQL Server执行更新需要更多时间

我有两个表(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;

截图


如果你关心的是这个查询的性能:

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

那么索引将非常有帮助:

create index idx_UserProfile_fkuser on UserProfile(fk_user);

这应该使查询几乎是瞬间的。

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


愚蠢的问题,你为什么要尝试基于[userType]值进行更新?

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

你不想在一个特定的[UserProfile]根据它的ID更新这个值(这是一个主键,所以会更快)

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

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

或者我错过了你想要做的事情(以及你试图更新的记录数量)。


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

链接地址: http://www.djcxy.com/p/15133.html

上一篇: sql server executing update it takes more time

下一篇: MySQL error 1215, what am I doing wrong?