使用nvarchar(max)查询需要2分钟来更新行

时间:2014-10-29 11:04:34

标签: sql-server sqlprofiler

我有一个简单的SQL查询,用于更新数据库中的单行...

@SettingValue包含大约2000,000字节(2mb)的文本。这是非常大的,但它不是很大,并且该领域可以接受长达2GB的长度。

表本身只有大约50行,这是唯一拥有这么多数据的行。

在我的开发机器上,编写数据大约需要一秒钟,但在生产(SQL 2005)中大约需要2分钟。

我觉得在尝试编写数据时它正在进行某种分页。

是否有任何工具可以监控SQL Server以确切了解它正在做什么?我有SQL Profiler,但我没有看到任何明显的东西,尽管我只使用标准的TSQL_Duration。

ALTER PROCEDURE [dbo].[Setsetting] @SurgId       INT,
                                   @SettingKey   NVARCHAR(10),
                                   @SettingValue NVARCHAR(max),
                                   @UserId       INT
AS
    DECLARE @setid INT

    SELECT @setid = id
    FROM   [general setting]
    WHERE  [key] = @SettingKey
           AND surg = @SurgId

    IF @setid IS NULL
      INSERT INTO [General Setting]
                  (surg,[key],setval,lastupd,
                   whoupd)
      VALUES      (@SurgId,@SettingKey,@SettingValue,Getdate(),
                   @UserId)
    ELSE
      UPDATE [General Setting]
      SET    setval = @SettingValue,
             lastupd = Getdate(),
             whoupd = @UserId
      WHERE  id = @setid

表格定义如下。

    CREATE TABLE [dbo].[General Setting]
      (
         [id]      [INT] IDENTITY(1, 1) NOT NULL,
         [surg]    [INT] NOT NULL,
         [key]     [NVARCHAR](8) NOT NULL,
         [setval]  [NVARCHAR](max) NULL,
         [lastupd] [DATETIME] NULL,
         [whoupd]  [INT] NULL,
         CONSTRAINT [PK_General_Setting] PRIMARY KEY CLUSTERED ( [id] ASC )
         WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
         ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
      )
    ON [PRIMARY] 

0 个答案:

没有答案