对 SQL Server 性能有疑问,想看看是否有人可以提供一些关于提高更新查询性能的提示。
我正在做的是用另一个表中的数据更新一个表。以下是一些基础知识:
- SQL Server 2008 R2
- 数据
WO
最初从其他系统泵送到表(在 ADO.NET 中使用 datareader 和 sqlbulkcopy 泵送) - 额外的数据被抽取到
TEMP_REMARKS
(在 ADO.NET 中使用 datareader 和 sqlbulkcopy 抽取) - 不幸的是,在原始系统中组合
WO
andREMARKS
(通过读者查询)是不可能的(主要是性能原因) - 使用更新两列的
WO
值进行更新TEMP_REMARKS
- 请注意,被转移
TEMP_REMARKS
到的列REMARKS
是 anvarchar(max)
并且正在被放入另一nvarchar(max)
列(实际上是两个 - 请参阅查询) WO
拥有超过 400 万条记录TEMP_REMARKS
拥有超过 700 万条记录
对于两者之间的连接,正在使用以下内容:
/* === UPDATE THE DESCRIPTION */
UPDATE WO
SET WO_DESCRIPTION = TEMP_REMARKS.REMARKS
FROM WO
INNER JOIN TEMP_REMARKS ON WO.WO_DESCRIPTION_ID = TEMP_REMARKS.REMARKS_ID;
/* === UPDATE THE FINDINGS */
UPDATE WO
SET FINDINGS = TEMP_REMARKS.REMARKS
FROM WO
INNER JOIN TEMP_REMARKS ON WO.FINDINGS_ID = TEMP_REMARKS.REMARKS_ID;
此时的问题是对WO
表的更新需要两个多小时才能完成。我尝试使用该MERGE
语句但没有成功。我在数据库中还有其他更完整的过程,它们不需要那么长时间,所以我确信这不是 SQL Server 本身的配置。
nvarchar(max)
更新列 时应该做些什么?
可以做些什么来提高此查询的性能?
以下是表定义:
CREATE TABLE [dbo].[WO](
[DOCUMENT_ID] [decimal](18, 0) NOT NULL,
[WO_DESCRIPTION_ID] [decimal](18, 0) NULL,
[WO_DESCRIPTION] [nvarchar](max) NULL,
[FINDINGS_ID] [decimal](18, 0) NULL,
[FINDINGS] [nvarchar](max) NULL,
.... bunch of other fields
CONSTRAINT [PK_WO] PRIMARY KEY CLUSTERED
(
[DOCUMENT_ID] ASC
)
这是 的表定义TEMP_REMARKS
:
CREATE TABLE [dbo].[TEMP_REMARKS](
[REMARKS_ID] [decimal](18, 0) NOT NULL,
[REMARKS] [nvarchar](max) NULL
) ON [PRIMARY]