Переменная вставки в временную таблицу SQL Server 2017 очень медленная, но не в 2014 году - PullRequest
0 голосов
/ 04 июля 2019

Я обновляю свою тестовую базу данных до версии для разработчиков 2017 года. Теперь у меня есть проблема с моей функцией табличного значения. вставка в выбранную производительность очень и очень медленная для записи вставки 4000-х.

declare @dateStart date = '4-Jul-2019'
,@dateEnd date = '4-Jul-2019'

declare @ntnOnDate table
( 
[NTM ID] char(8)
,[NTM Type] char(3) -- Posible Value: NTM, UPR, SOL
,primary key clustered([NTM ID], [NTM Type])
)

declare @finishedNTM table
(
[NTM ID] char(8)
,[NTM Type] char(3)
,Dept char(3)
,[Model Number] char(4)
,[Shoes Type] int
,[Shoes Version] int
,[Size] varchar(5)
,[Pairs] int not null
--, primary key clustered ([NTM ID], [NTM Type],Dept, [Model Number], [Shoes Type], [Shoes Version], [Size])
)   

insert into @ntnOnDate
 --- select statement (Only 16 record) --

insert into @finishedNTM (
[NTM ID]
, [NTM Type]
, Dept
, [Model Number]
, [Shoes Type]
, [Shoes Version]
, [Size]
, pairs
)
select 
a.[TSW ID] as [NTM ID]
,'NTM' as [NTM Type]
,a.[From Department] as [Dept]
,b.[Model Number]
,b.[Shoes Type]
,b.[Shoes Version]
,b.Size
,sum(b.Pairs) as Pairs
from [TSW Master] a
inner join [TSW Details] b
    on a.[TSW ID] = b.[TSW ID]
    and a.Issue = b.Issue
    and a.[From Department] = b.[From Department]
    and a.[To Department] = b.[To Department]
--inner join @ntnOnDate c
--  on a.[TSW ID] = c.[NTM ID]
where a.Executed = 1
    and a.Accepted = 1
    and a.[From Department] <> '210'
    --and c.[NTM Type] = 'NTM'
    and a.[TSW ID] in (select x.[NTM ID] from @ntnOnDate x where x.[NTM Type] = 'NTM')
group by 
a.[TSW ID]
,a.[From Department]
,b.[Model Number]
,b.[Shoes Type]
,b.[Shoes Version]
,b.Size

Странно, когда я использую «select top 4462» (количество записей в операторе select равно 4462) с оператором select, вставка завершится через 2 секунды.

Может ли кто-нибудь мне помочь? Заранее спасибо. A'an

1 Ответ

0 голосов
/ 04 июля 2019

Я нашел решение, чтобы настроить производительность вставки.Я изменяю оператор вставки на:

insert @finishedNTM
select 
a.[NTM ID]
,'NTM' as [NTM Type]
,b.[From Department] as [Dept]
,b.[Model Number]
,b.[Shoes Type]
,b.[Shoes Version]
,b.Size
,b.Pairs
from @ntnOnDate a
inner join (
    select
    a.[TSW ID]
    ,a.[From Department]
    ,b.[Model Number]
    ,b.[Shoes Type]
    ,b.[Shoes Version]
    ,b.Size
    ,sum(b.Pairs) as Pairs
    from [TSW Master]  a
    inner join [TSW Details] b
        on a.[TSW ID] = b.[TSW ID]
        and a.Issue = b.Issue
        and a.[From Department] = b.[From Department]
        and a.[To Department] = b.[To Department]
    where a.Executed = 1
        and a.Accepted = 1
        and a.[From Department] <> '210'
    group by
    a.[TSW ID]
    ,a.[From Department]
    ,b.[Model Number]
    ,b.[Shoes Type]
    ,b.[Shoes Version]
    ,b.Size
)  b
    on a.[NTM ID] = b.[TSW ID]  
where a.[NTM Type] = 'NTM'

Агрегат SUM перемещается внутри блока операторов, а затем я присоединяюсь к блоку с другой временной таблицей.

Но я до сих пор не знаю, почемуэта проблема случилась.На SQL Server 2014 запрос в порядке.

С уважением, A'an

...