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