首页 文章

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

提问于
浏览
1

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

  • 1

    如果您担心此查询的性能:

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

    那么索引将非常有用:

    create index idx_UserProfile_fkuser on UserProfile(fk_user);
    

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

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

  • 0

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

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

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

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

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

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

  • 0

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

  • 0

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

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

  • 0

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

相关问题