У меня довольно простой запрос MERGE, где исходная таблица составляет всего около 41 МБ, а целевая таблица - около 4 ГБ. Я просто добавляю записи строк в большую целевую таблицу (избегая дублирования записей первичного ключа). Этот запрос выполняется очень медленно при выполнении в Management studio. Это уже работает 15 минут и не завершено. Просто интересно, есть ли варианты ускорения исполнения или я что-то не так делаю. Спасибо.
Вот запрос:
MERGE [myschema].[targettable] target
USING [myschema].[sourcetable] source
ON target.STATION_ID = source.STATION_ID
WHEN NOT MATCHED BY TARGET THEN
INSERT (STATION_ID, SENSORNAME, TIME_TAG, ORIG_VALUE, ED_VALUE, SOURCE)
VALUES (source.STATION_ID, source.SENSORNAME, source.TIME_TAG, source.ORIG_VALUE, source.ED_VALUE, source.SOURCE);
Начало примерного исполнения xml:
<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.1" Build="10.50.1600.1" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementCompId="1" StatementEstRows="92529300000" StatementId="1" StatementOptmLevel="FULL" StatementSubTreeCost="45530500" StatementText="--sp_configure 'show advanced options', 1;
--RECONFIGURE;
--GO
--sp_configure 'Ad Hoc Distributed Queries', 1;
--RECONFIGURE;
--GO
MERGE XCManager.XC_DATA1 target
USING XCManager.FrkFalls_FORMATTED source
ON target.STATION_ID = source.STATION_ID
WHEN NOT MATCHED BY TARGET THEN
 INSERT (STATION_ID, SENSORNAME, TIME_TAG, ORIG_VALUE, ED_VALUE, SOURCE)
 VALUES (source.STATION_ID, source.SENSORNAME, source.TIME_TAG, source.ORIG_VALUE, source.ED_VALUE, source.SOURCE);" StatementType="MERGE" QueryHash="0x0A5DB292FF222BCD" QueryPlanHash="0x1FBBCC92AE041A3E">
<StatementSetOptions ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" NUMERIC_ROUNDABORT="false" QUOTED_IDENTIFIER="true" />
<QueryPlan CachedPlanSize="64" CompileTime="31" CompileCPU="15" CompileMemory="736">
<RelOp AvgRowSize="9" EstimateCPU="92529.3" EstimateIO="7070610" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="92529300000" LogicalOp="Merge" NodeId="1" Parallel="false" PhysicalOp="Clustered Index Merge" EstimatedTotalSubtreeCost="45530500">
<OutputList />
<Update WithOrderedPrefetch="true" DMLRequestSort="true">
<Object Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Index="[DAT1_PK]" Alias="[target]" IndexKind="Clustered" />
<SetPredicate>
<ScalarOperator ScalarString="[XConnectDB_NHDES].[XCManager].[XC_DATA1].[SOURCE] as [target].[SOURCE] = RaiseIfNullUpdate([Expr1008]),[XConnectDB_NHDES].[XCManager].[XC_DATA1].[SENSORNAME] as [target].[SENSORNAME] = RaiseIfNullUpdate([Expr1009]),[XConnectDB_NHDES].[XCManager].[XC_DATA1].[ED_VALUE] as [target].[ED_VALUE] = [XConnectDB_NHDES].[XCManager].[FrkFalls_FORMATTED].[ED_VALUE] as [source].[ED_VALUE],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[ORIG_VALUE] as [target].[ORIG_VALUE] = RaiseIfNullUpdate([XConnectDB_NHDES].[XCManager].[FrkFalls_FORMATTED].[ORIG_VALUE] as [source].[ORIG_VALUE]),[XConnectDB_NHDES].[XCManager].[XC_DATA1].[TIME_TAG] as [target].[TIME_TAG] = RaiseIfNullUpdate([XConnectDB_NHDES].[XCManager].[FrkFalls_FORMATTED].[TIME_TAG] as [source].[TIME_TAG]),[XConnectDB_NHDES].[XCManager].[XC_DATA1].[STATION_ID] as [target].[STATION_ID] = RaiseIfNullUpdate([Expr1010]),[XConnectDB_NHDES].[XCManager].[XC_DATA1].[FLAG1] as [target].[FLAG1] = [Expr1011],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[FLAG2] as [target].[FLAG2] = [Expr1012],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[FLAG3] as [target].[FLAG3] = [Expr1013],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[FLAG4] as [target].[FLAG4] = [Expr1014],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[HIGH_HIGH_FLAG] as [target].[HIGH_HIGH_FLAG] = [Expr1015],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[HIGH_FLAG] as [target].[HIGH_FLAG] = [Expr1016],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[LOW_FLAG] as [target].[LOW_FLAG] = [Expr1017],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[LOW_LOW_FLAG] as [target].[LOW_LOW_FLAG] = [Expr1018],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[ROC_FLAG] as [target].[ROC_FLAG] = [Expr1019],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[NO_CHG_FLAG] as [target].[NO_CHG_FLAG] = [Expr1020],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[ALARM_FLAG] as [target].[ALARM_FLAG] = [Expr1021],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[STD_DEV_FLAG] as [target].[STD_DEV_FLAG] = [Expr1022],[XConnectDB_NHDES].[XCManager].[XC_DATA1].[AVG_FLAG] as [target].[AVG_FLAG] = [Expr1023]">
<ScalarExpressionList>
<ScalarOperator>
<MultipleAssign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="SOURCE" />
<ScalarOperator>
<Intrinsic FunctionName="RaiseIfNullUpdate">
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1008" />
</Identifier>
</ScalarOperator>
</Intrinsic>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="SENSORNAME" />
<ScalarOperator>
<Intrinsic FunctionName="RaiseIfNullUpdate">
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1009" />
</Identifier>
</ScalarOperator>
</Intrinsic>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="ED_VALUE" />
<ScalarOperator>
<Identifier>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[FrkFalls_FORMATTED]" Alias="[source]" Column="ED_VALUE" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="ORIG_VALUE" />
<ScalarOperator>
<Intrinsic FunctionName="RaiseIfNullUpdate">
<ScalarOperator>
<Identifier>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[FrkFalls_FORMATTED]" Alias="[source]" Column="ORIG_VALUE" />
</Identifier>
</ScalarOperator>
</Intrinsic>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="TIME_TAG" />
<ScalarOperator>
<Intrinsic FunctionName="RaiseIfNullUpdate">
<ScalarOperator>
<Identifier>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[FrkFalls_FORMATTED]" Alias="[source]" Column="TIME_TAG" />
</Identifier>
</ScalarOperator>
</Intrinsic>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="STATION_ID" />
<ScalarOperator>
<Intrinsic FunctionName="RaiseIfNullUpdate">
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1010" />
</Identifier>
</ScalarOperator>
</Intrinsic>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="FLAG1" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1011" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="FLAG2" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1012" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="FLAG3" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1013" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="FLAG4" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1014" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="HIGH_HIGH_FLAG" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1015" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="HIGH_FLAG" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1016" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="LOW_FLAG" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1017" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="LOW_LOW_FLAG" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1018" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="ROC_FLAG" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1019" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="NO_CHG_FLAG" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1020" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="ALARM_FLAG" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1021" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="STD_DEV_FLAG" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1022" />
</Identifier>
</ScalarOperator>
</Assign>
<Assign>
<ColumnReference Database="[XConnectDB_NHDES]" Schema="[XCManager]" Table="[XC_DATA1]" Alias="[target]" Column="AVG_FLAG" />
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1023" />
</Identifier>
</ScalarOperator>
</Assign>
</MultipleAssign>
</ScalarOperator>
</ScalarExpressionList>
</ScalarOperator>
</SetPredicate>
<ActionColumn>
<ColumnReference Column="Action1007" />
</ActionColumn>
<RelOp AvgRowSize="130" EstimateCPU="9252.93" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimateRows="92529300000" LogicalOp="Compute Scalar" NodeId="3" Parallel="false" PhysicalOp="Compute Scalar" EstimatedTotalSubtreeCost="38367300">
<OutputList>