多语言展示
当前在线:1489今日阅读:75今日分享:44

MSSQL有时使用update语句很慢时怎么办

MSSQL有时使用update语句很慢时怎么办。很多使用MSSQL朋友都可能遇到这样的问题,同样的SQL句子,在使用更新或是插入时就会很慢。那这个怎么解决呢。下边就听小编给你讲讲。
工具/原料

MSSQL

方法/步骤
1

我们登陆MSSQL,这里我用的是SQL Server 2008 相信现在很多朋友都是用这个版本。打开管理器

2

我们这里建一个测试表。当然您如果是遇到的问题就不需要使用测试表了,。

3

我们插入数据。

4

这时候我们在一台正常的进行处理的数据库中进行运行一个更新语句发现执行时间很短,一下就更新了。     UPDATE  tmp_20150415    SET     导入结果 = ISNULL(导入结果, '') +'用户账号【'+ t1.账号 + '】 在表内已重复'    FROM    ( SELECT    tmp_20150415.账号              FROM      tmp_20150415              GROUP BY  tmp_20150415.账号              HAVING    COUNT(tmp_20150415.账号) > 1            ) t1

5

我们再在另一台不正常的服务器上执行时,发现其执行效率很慢。几秒过去了,还没执行完成。

6

那造成这个问题的原因有很多,我们要一一排除。首先看下各列的数据类型。检查一下 服务器数据多.不多。我们这里因为都是插入的测试数据。所以这些都可排除。那这个时候最大的可能就是有事务没执行了这时候就要 找到阻塞的进程,然后kill掉,然后再执行更新,就会发现正常了。我们用下边的句子可以检查。    SELECT DB_NAME(sp.dbid) dbName,   (SELECT TEXT FROM   sys.dm_exec_sql_text(sql_handle)) TEXT,lastwaittype,             spid  AS [sessionID],                  kpid  AS [WinodwsId],sp.kpid, sp.blocked, sp.waittype, sp.waittime, sp.waitresource,                       sp.[status], sp.hostname, sp.program_name,                            sp.cmd, sp.loginame,           sp.uid, sp.cpu, sp.physical_io, sp.memusage, sp.login_time,           sp.last_batch, sp.ecid, sp.open_tran,            sp.hostprocess, sp.nt_domain,           sp.nt_username, sp.net_address, sp.net_library,           sp.[context_info], sp.stmt_start, sp.stmt_end, sp.request_id    FROM   sys.sysprocesses sp                       WHERE  spid > 50                                                   AND (sp.blocked>0 OR EXISTS(                                           SELECT * FROM sys.sysprocesses lssp WHERE lssp.blocked=sp.spid                                                  ));

推荐信息