У вас есть несколько возможностей:
Вы можете рассмотреть возможность изменения вашего первичного ключа на:
CONSTRAINT [PK_Test]
PRIMARY KEY CLUSTERED (TeamId ASC, [Id] ASC)
За счет расширения кластерного индекса, прикрепленного к первичному ключу, вы выигралине записывайте свой индекс поиска диапазона в столбце Идентичность.Это потребовало бы периодической дефрагментации
Другой ( вероятно предпочтительный ) вариант заключается в создании некластеризованного индекса:
CREATE INDEX IX_TestDefinition_TeamId_Name
ON dbo.TestDefinition(TeamId, Name)
[Примечание: нет необходимости явно ВКЛЮЧИТЬ Id
, поскольку это ключ кластеризации, который добавляется к каждому некластеризованному индексу.]
Я бы также рассмотрел размещение значений входящего параметра TVP во временной таблице, а не в табличной переменной, и присоединение к ней.таблица (даже создание соответствующего индекса на нем).Табличные переменные печально известны плохими оценками кардинальности.
Я также рассмотрел бы добавление индекса со сжатием страниц (и таблицы, если вы можете)
.... with (data_compression = page);
Сжатие данных не доступно в каждой редакции SQL Server.SQL Server 2016 и более поздних версий выпущен в стандартной версии.
Еще одна вещь, которую вы должны рассмотреть, - это выполнять вставки в пакетах, скажем, по 50 КБ или 100 КБ за один раз, с небольшим перерывом между ними.Это может предотвратить массовый рост и конфликт файлов журнала и позволить другим процессам получить доступ к таблице.