TSql 병합 명령은 어떤 이유로 느려집니다.tsql 병합 속도가 느려집니다.
일괄 처리 후 데이터 배치를 10000 레코드와 동일한 병합으로 병합하고 하나의 병합에서 다른 병합으로 이동하는 데 더 오래 걸립니다. 여기
병합 명령이다MERGE [dbo].[SResult] AS target
USING [dbo].[SResultTemp] AS source
ON (target.QSId = source.QSId
and target.ResultId = source.ResultId
and target.EngineId = source.EngineId)
WHEN NOT MATCHED THEN INSERT
(QSId, ResultId, EngineId, Position)
values
(source.QSId, source.ResultId, source.EngineId, source.Position);
소스 테이블은 대상이 동일이
CREATE TABLE [dbo].[SResultTemp](
[QSId] int not null,
[ResultId] int not null,
[EngineId] int not null,
[Position] int not null,
CONSTRAINT [PK_SResultTemp] PRIMARY KEY CLUSTERED(
[QSId], [ResultId], [EngineId], [Position] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
같이 선언하지만 기본 키 및 인덱스의 다른 세트로 추가 필드 SResultId을 갖는다 :
PK_SResult - 차
IX_SResult_QS 내가 작업 또한
Results Upload: SResult took 00:00:01.0008344
Results Upload: SResult took 00:00:18.1046734
Results Upload: SResult took 00:00:17.9797846
Results Upload: SResult took 00:00:27.7828817
Results Upload: SResult took 00:01:30.4140091
Results Upload: SResult took 00:03:17.6433416
Results Upload: SResult took 00:03:21.3761251
Results Upload: SResult took 00:06:07.2555342
Results Upload: SResult took 00:06:56.2423653
Results Upload: SResult took 00:06:57.1729179
Results Upload: SResult took 00:07:09.7221083
: Id_ResultId - 여기
및
내가 로그에 표시되는 내용입니다 클러스터 된 비 고유 -, 고유하지 않은UX_SResult_EngineId_QSId_Position를 클러스터되지 않은 - 비 고유은
IX_SResult_EngineId 클러스터되지 않은 여러 테이블이 있으므로 다른 테이블에는 이와 같은 규칙이 없습니다. 누구든지 도와 줄 수 있습니까?
감사합니다.
공정한 PK는 다소 부족합니다. – ChaosPandion
PK가 파편 삽입 속도가 떨어지면 (그리고 생각보다 훨씬 빠름) – Paparazzi