А вот если в конце добавить
OPTION (LOOP JOIN)
то начинает летать! :) раньше запрос сильно зависел от ширины временного интервала - сейчас почти нет. супер!
вот конечный план:
19918 1 |--Compute Scalar(DEFINE:([Expr1009]=[Expr1005]/[ЕИ2].[КоэфицентПересчета])) 26 2 1 Compute Scalar Compute Scalar DEFINE:([Expr1009]=[Expr1005]/[ЕИ2].[КоэфицентПересчета]) [Expr1009]=[Expr1005]/[ЕИ2].[КоэфицентПересчета] 9828,941 0 0,0009828942 55 91,81275 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [РМЦ].[ID_Материала], [РМЦ].[ID_Размерность], [РМЦ].[flMain], [ЕИ2].[ID_ЕдИзм] NULL PLAN_ROW 0 1
19918 1 |--Parallelism(Gather Streams) 26 3 2 Parallelism Gather Streams NULL NULL 9828,941 0 0,1391493 212 91,81177 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [Expr1005], [РМЦ].[ID_Материала], [РМЦ].[ID_Размерность], [РМЦ].[flMain], [ЕИ2 NULL PLAN_ROW 1 1
19918 3 |--Nested Loops(Inner Join, OUTER REFERENCES:([ТМЦЕИР].[ID_ЕдИзм])) 26 4 3 Nested Loops Inner Join OUTER REFERENCES:([ТМЦЕИР].[ID_ЕдИзм]) NULL 9828,941 0 0,02231596 212 91,67262 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [Expr1005], [РМЦ].[ID_Материала], [РМЦ].[ID_Размерность], [РМЦ].[flMain], [ЕИ2 NULL PLAN_ROW 1 1
19918 3 |--Bookmark Lookup(BOOKMARK:([Bmk1006]), OBJECT:([RedOkt].[dbo].[sprРазмерностиМатЦенностей] AS [РМЦ])) 26 5 4 Bookmark Lookup Bookmark Lookup BOOKMARK:([Bmk1006]), OBJECT:([RedOkt].[dbo].[sprРазмерностиМатЦенностей] AS [РМЦ]) [РМЦ].[ID_Материала], [РМЦ].[ID_Размерность], [РМЦ].[flMain] 10677,49 0,4343612 0,005872621 108 90,79707 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [Expr1005], [РМЦ].[ID_Материала], [РМЦ].[ID_Размерность], [РМЦ].[flMain], [ТМЦ NULL PLAN_ROW 1 1
19918 3 | |--Nested Loops(Inner Join, OUTER REFERENCES:([ТМЦЕИР].[IDРазмМатЦенности]) WITH PREFETCH) 26 7 5 Nested Loops Inner Join OUTER REFERENCES:([ТМЦЕИР].[IDРазмМатЦенности]) WITH PREFETCH NULL 10677,49 0 0,02241662 107 90,35683 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [Expr1005], [Bmk1006], [ТМЦЕИР].[ID_ЕдИзм] NULL PLAN_ROW 1 1
19918 3 | |--Bookmark Lookup(BOOKMARK:([Bmk1007]), OBJECT:([RedOkt].[dbo].[sprТМЦ_ЕдИзмРазмерностиМЦДоп] AS [ТМЦЕИР])) 26 9 7 Bookmark Lookup Bookmark Lookup BOOKMARK:([Bmk1007]), OBJECT:([RedOkt].[dbo].[sprТМЦ_ЕдИзмРазмерностиМЦДоп] AS [ТМЦЕИР]) [ТМЦЕИР].[IDРазмМатЦенности], [ТМЦЕИР].[ID_ЕдИзм] 10725,66 0,4874845 0,005899112 73 68,51928 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [Expr1005], [ТМЦЕИР].[IDРазмМатЦенности], [ТМЦЕИР].[ID_ЕдИзм] NULL PLAN_ROW 1 1
19918 3 | | |--Nested Loops(Inner Join, OUTER REFERENCES:([СРЗ].[IDРазмМатЦенности]) WITH PREFETCH) 26 11 9 Nested Loops Inner Join OUTER REFERENCES:([СРЗ].[IDРазмМатЦенности]) WITH PREFETCH NULL 10725,66 0 0,0225451 69 68,02589 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [Expr1005], [Bmk1007] NULL PLAN_ROW 1 1
19918 3 | | |--Stream Aggregate(GROUP BY:([СРЗ].[IDРазмМатЦенности], [СЗДД].[ID_КартаСкладаDest], [СДД].[ID_Получатель], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo]) D 26 13 11 Stream Aggregate Aggregate GROUP BY:([СРЗ].[IDРазмМатЦенности], [СЗДД].[ID_КартаСкладаDest], [СДД].[ID_Получатель], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo]) [Expr1005]=SUM([СРЗ].[Значение]), [СКС].[Id_Счет]=ANY([СКС].[Id_Счет]) 10787,13 0 0,04018205 46 65,23539 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [СРЗ].[IDРазмМатЦенности], [Expr1005] NULL PLAN_ROW 1 1
63240 3 | | | |--Sort(ORDER BY:([СРЗ].[IDРазмМатЦенности] ASC, [СЗДД].[ID_КартаСкладаDest] ASC, [СДД].[ID_Получатель] ASC, [СЗДД].[ID_ПартииТМЦ] ASC, [СЗДД].[ID_Организации] ASC, [СЗДД].[ID_ПартияПодразделение] ASC, [СЗДД].[ID_З 26 14 13 Sort Sort ORDER BY:([СРЗ].[IDРазмМатЦенности] ASC, [СЗДД].[ID_КартаСкладаDest] ASC, [СДД].[ID_Получатель] ASC, [СЗДД].[ID_ПартииТМЦ] ASC, [СЗДД].[ID_Организации] ASC, [СЗДД].[ID_ПартияПодразделение] ASC, [СЗДД].[ID_ЗаписиЗаказаTo] ASC) NULL 10787,13 0,005630631 0,3317129 46 65,19521 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [СРЗ].[Значение], [СРЗ].[IDРазмМатЦенности] NULL PLAN_ROW 1 1
63240 3 | | | |--Parallelism(Repartition Streams, PARTITION COLUMNS:([СРЗ].[IDРазмМатЦенности], [СЗДД].[ID_КартаСкладаDest], [СДД].[ID_Получатель], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделе 26 15 14 Parallelism Repartition Streams PARTITION COLUMNS:([СРЗ].[IDРазмМатЦенности], [СЗДД].[ID_КартаСкладаDest], [СДД].[ID_Получатель], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo]) NULL 10787,13 0 0,139095 62 64,85786 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [СРЗ].[Значение], [СРЗ].[IDРазмМатЦенности] NULL PLAN_ROW 1 1
63240 3 | | | |--Bookmark Lookup(BOOKMARK:([Bmk1003]), OBJECT:([RedOkt].[oz].[СклРазмерностьЗапаса] AS [СРЗ])) 26 16 15 Bookmark Lookup Bookmark Lookup BOOKMARK:([Bmk1003]), OBJECT:([RedOkt].[oz].[СклРазмерностьЗапаса] AS [СРЗ]) [СРЗ].[Значение], [СРЗ].[IDРазмМатЦенности] 10787,13 20,36185 0,005932921 62 64,71877 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [СРЗ].[Значение], [СРЗ].[IDРазмМатЦенности] NULL PLAN_ROW 1 1
63240 3 | | | |--Nested Loops(Inner Join, OUTER REFERENCES:([СЗДД].[ID_ЗаписиДокДвижения]) WITH PREFETCH) 26 18 16 Nested Loops Inner Join OUTER REFERENCES:([СЗДД].[ID_ЗаписиДокДвижения]) WITH PREFETCH NULL 10787,13 0 0,02254538 54 44,35098 [СДД].[ID_Получатель], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет], [Bmk1003] NULL PLAN_ROW 1 1
56033 3 | | | |--Sort(ORDER BY:([СЗДД].[ID_ЗаписиДокДвижения] ASC)) 26 20 18 Sort Sort ORDER BY:([СЗДД].[ID_ЗаписиДокДвижения] ASC) NULL 8439,83 0,005630631 0,1983442 37 37,36341 [СДД].[ID_Получатель], [СЗДД].[ID_ЗаписиДокДвижения], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет] NULL PLAN_ROW 1 1
56033 3 | | | | |--Nested Loops(Inner Join, OUTER REFERENCES:([СЗДД].[ID_КартаСкладаDest]) WITH PREFETCH) 26 21 20 Nested Loops Inner Join OUTER REFERENCES:([СЗДД].[ID_КартаСкладаDest]) WITH PREFETCH NULL 8439,83 0 0,02883789 77 37,15944 [СДД].[ID_Получатель], [СЗДД].[ID_ЗаписиДокДвижения], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo], [СКС].[Id_Счет] NULL PLAN_ROW 1 1
56033 3 | | | | |--Sort(ORDER BY:([СЗДД].[ID_КартаСкладаDest] ASC)) 26 23 21 Sort Sort ORDER BY:([СЗДД].[ID_КартаСкладаDest] ASC) NULL 13798,04 0,005630631 0,4355331 35 33,69363 [СДД].[ID_Получатель], [СЗДД].[ID_ЗаписиДокДвижения], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo] NULL PLAN_ROW 1 1
56033 3 | | | | | |--Bookmark Lookup(BOOKMARK:([Bmk1001]), OBJECT:([RedOkt].[oz].[СклЗаписиДокДвижения] AS [СЗДД])) 26 24 23 Bookmark Lookup Bookmark Lookup BOOKMARK:([Bmk1001]), OBJECT:([RedOkt].[oz].[СклЗаписиДокДвижения] AS [СЗДД]) [СЗДД].[ID_ЗаписиДокДвижения], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo] 13798,04 29,41157 0,007588919 61 33,25246 [СДД].[ID_Получатель], [СЗДД].[ID_ЗаписиДокДвижения], [СЗДД].[ID_КартаСкладаDest], [СЗДД].[ID_ПартииТМЦ], [СЗДД].[ID_Организации], [СЗДД].[ID_ПартияПодразделение], [СЗДД].[ID_ЗаписиЗаказаTo] NULL PLAN_ROW 1 1
56033 3 | | | | | |--Nested Loops(Inner Join, OUTER REFERENCES:([СДД].[ID_ДокДвижения]) WITH PREFETCH) 26 26 24 Nested Loops Inner Join OUTER REFERENCES:([СДД].[ID_ДокДвижения]) WITH PREFETCH NULL 13798,04 0 0,02883789 31 3,833307 [СДД].[ID_Получатель], [Bmk1001] NULL PLAN_ROW 1 1
30496 3 | | | | | |--Sort(ORDER BY:([СДД].[ID_ДокДвижения] ASC)) 26 28 26 Sort Sort ORDER BY:([СДД].[ID_ДокДвижения] ASC) NULL 1733,107 0,005630631 0,01459447 15 0,1061 [СДД].[ID_ДокДвижения], [СДД].[ID_Получатель] NULL PLAN_ROW 1 1
30496 3 | | | | | | |--Nested Loops(Inner Join, OUTER REFERENCES:([ВД].[ID_Документ]) WITH PREFETCH) 26 29 28 Nested Loops Inner Join OUTER REFERENCES:([ВД].[ID_Документ]) WITH PREFETCH NULL 1733,107 0 0,003622193 150 0,08587494 [СДД].[ID_ДокДвижения], [СДД].[ID_Получатель] NULL PLAN_ROW 1 1
60 3 | | | | | | |--Parallelism(Distribute Streams) 26 31 29 Parallelism Distribute Streams NULL NULL 60 0 0,02861241 57 0,09502239 [ВД].[ID_Документ] NULL PLAN_ROW 1 1
60 1 | | | | | | | |--Clustered Index Scan(OBJECT:([RedOkt].[dbo].[sprВидыДокументов].[PK_sprВидыДокументов] AS [ВД]), WHERE:(Convert([ВД].[НеОборотный])=0 OR [ВД].[НеОборот 26 32 31 Clustered Index Scan Clustered Index Scan OBJECT:([RedOkt].[dbo].[sprВидыДокументов].[PK_sprВидыДокументов] AS [ВД]), WHERE:(Convert([ВД].[НеОборотный])=0 OR [ВД].[НеОборотный]=NULL) [ВД].[ID_Документ], [ВД].[НеОборотный] 60 0,0375785 0,0001478 57 0,0377263 [ВД].[ID_Документ], [ВД].[НеОборотный] NULL PLAN_ROW 0 1
30496 60 | | | | | | |--Clustered Index Seek(OBJECT:([RedOkt].[oz].[СклДокументыДвижения].[СклДокументыДвижения2] AS [СДД]), SEEK:([СДД].[ID_Документ]=[ВД].[ID_Документ] AND [СДД]. 26 33 29 Clustered Index Seek Clustered Index Seek OBJECT:([RedOkt].[oz].[СклДокументыДвижения].[СклДокументыДвижения2] AS [СДД]), SEEK:([СДД].[ID_Документ]=[ВД].[ID_Документ] AND [СДД].[ДатаДок] >= 'янв 1 2005 12:00AM' AND [СДД].[ДатаДок] <= 'янв 1 2006 12:00AM'), WHERE:([СДД].[ТипДвиж]=0 AND [СДД].[ID [СДД].[ID_ДокДвижения], [СДД].[ID_Сдатчик], [СДД].[ТипДвиж], [СДД].[ID_Получатель] 28,88511 0,003203401 0,0001105625 101 0,01431763 [СДД].[ID_ДокДвижения], [СДД].[ID_Сдатчик], [СДД].[ТипДвиж], [СДД].[ID_Получатель] NULL PLAN_ROW 1 60
56033 30496 | | | | | |--Index Seek(OBJECT:([RedOkt].[oz].[СклЗаписиДокДвижения].[СклЗаписиДокДвижения33] AS [СЗДД]), SEEK:([СЗДД].[ID_ДокДвижения]=[СДД].[ID_ДокДвижения]) ORDERED FORWARD) 26 34 26 Index Seek Index Seek OBJECT:([RedOkt].[oz].[СклЗаписиДокДвижения].[СклЗаписиДокДвижения33] AS [СЗДД]), SEEK:([СЗДД].[ID_ДокДвижения]=[СДД].[ID_ДокДвижения]) ORDERED FORWARD [Bmk1001] 7,961446 0,003203401 8,728148E-05 23 3,698369 [Bmk1001] NULL PLAN_ROW 1 1733,107
56033 56033 | | | | |--Index Seek(OBJECT:([RedOkt].[oz].[СклКартаСклада].[PK_СклКартаСклада] AS [СКС]), SEEK:([СКС].[ID_КартаСклада]=[СЗДД].[ID_КартаСкладаDest]) ORDERED FORWARD) 26 35 21 Index Seek Index Seek OBJECT:([RedOkt].[oz].[СклКартаСклада].[PK_СклКартаСклада] AS [СКС]), SEEK:([СКС].[ID_КартаСклада]=[СЗДД].[ID_КартаСкладаDest]) ORDERED FORWARD [СКС].[Id_Счет] 1 0,003203401 7,9603E-05 48 3,436974 [СКС].[Id_Счет] NULL PLAN_ROW 1 13798,04
63240 56033 | | | |--Index Seek(OBJECT:([RedOkt].[oz].[СклРазмерностьЗапаса].[PK_СклРазмерностьЗапаса] AS [СРЗ]), SEEK:([СРЗ].[ID_ЗаписиДокДвижения]=[СЗДД].[ID_ЗаписиДокДвижения]) ORDERED FORWARD) 26 36 18 Index Seek Index Seek OBJECT:([RedOkt].[oz].[СклРазмерностьЗапаса].[PK_СклРазмерностьЗапаса] AS [СРЗ]), SEEK:([СРЗ].[ID_ЗаписиДокДвижения]=[СЗДД].[ID_ЗаписиДокДвижения]) ORDERED FORWARD [Bmk1003] 1,278137 0,003203401 7,990978E-05 23 6,965021 [Bmk1003] NULL PLAN_ROW 1 8439,83
19918 19918 | | |--Index Seek(OBJECT:([RedOkt].[dbo].[sprТМЦ_ЕдИзмРазмерностиМЦДоп].[IX_sprТМЦ_ЕдИзмРазмерностиМЦДоп] AS [ТМЦЕИР]), SEEK:([ТМЦЕИР].[ID_ФормаПредставления]=3 AND [ТМЦЕИР].[IDРазмМатЦенности]=[СРЗ].[IDРазмМатЦенности]) OR 26 44 11 Index Seek Index Seek OBJECT:([RedOkt].[dbo].[sprТМЦ_ЕдИзмРазмерностиМЦДоп].[IX_sprТМЦ_ЕдИзмРазмерностиМЦДоп] AS [ТМЦЕИР]), SEEK:([ТМЦЕИР].[ID_ФормаПредставления]=3 AND [ТМЦЕИР].[IDРазмМатЦенности]=[СРЗ].[IDРазмМатЦенности]) ORDERED FORWARD [Bmk1007] 1 0,003203401 7,9607E-05 30 2,767958 [Bmk1007] NULL PLAN_ROW 1 10787,13
19918 19918 | |--Index Seek(OBJECT:([RedOkt].[dbo].[sprРазмерностиМатЦенностей].[PK_sprРазмерностьПрофиляСортамента] AS [РМЦ]), SEEK:([РМЦ].[IDРазмМатЦенности]=[ТМЦЕИР].[IDРазмМатЦенности]) ORDERED FORWARD) 26 45 7 Index Seek Index Seek OBJECT:([RedOkt].[dbo].[sprРазмерностиМатЦенностей].[PK_sprРазмерностьПрофиляСортамента] AS [РМЦ]), SEEK:([РМЦ].[IDРазмМатЦенности]=[ТМЦЕИР].[IDРазмМатЦенности]) ORDERED FORWARD [Bmk1006] 1 0,003203401 7,9603E-05 42 21,81514 [Bmk1006] NULL PLAN_ROW 1 10725,66
19918 19918 |--Clustered Index Seek(OBJECT:([RedOkt].[dbo].[sprЕдИзм].[PK_ЕдИзм] AS [ЕИ2]), SEEK:([ЕИ2].[ID_ЕдИзм]=[ТМЦЕИР].[ID_ЕдИзм]) ORDERED FORWARD) 26 46 4 Clustered Index Seek Clustered Index Seek OBJECT:([RedOkt].[dbo].[sprЕдИзм].[PK_ЕдИзм] AS [ЕИ2]), SEEK:([ЕИ2].[ID_ЕдИзм]=[ТМЦЕИР].[ID_ЕдИзм]) ORDERED FORWARD [ЕИ2].[КоэфицентПересчета], [ЕИ2].[ID_ЕдИзм] 1 0,003203401 7,9603E-05 112 0,8532423 [ЕИ2].[КоэфицентПересчета], [ЕИ2].[ID_ЕдИзм] NULL PLAN_ROW 1 10677,49
вообще мне понравился подход - сначала сделать агрегирование, а потом прицепить все остальное. Возьму на вооружение...