У меня есть две таблицы, где иногда приходится добавлять много строк. Последний случай составлял 800000 строк в таблице1 и в 3 раза больше в таблице 2.Скорость вставки MS SQL Server с использованием SqlCommand
Я использую следующую хранимую процедуру для вставки строк, потому что я не вижу способ использовать массовую копию, учитывая, что таблицы имеют поля автодетектора и имеют иностранный ключ отношение.
CREATE PROCEDURE dbo.AddOrderBookEntry
@Moment datetime,
@LocalTime datetime,
@BB decimal(18,4),
@BO decimal(18,4),
@QBB float,
@QBO float,
@SumTr float = NULL,
@QSumTr float = NULL,
@IV float = NULL,
@InstrumentId bigint,
@AverageValues Averages READONLY
AS
BEGIN
INSERT INTO dbo.OrderBook
VALUES (@Moment,@LocalTime,@BB,@BO,@QBB,@QBO,@SumTr,@QSumTr,@IV,@InstrumentId)
DECLARE @OBID bigint
SELECT @OBID = SCOPE_IDENTITY()
INSERT INTO dbo.OrderbookAverages
select N, BN, [ON], @OBID from @AverageValues
END
GO
Это работает, но меня беспокоит скорость. Согласно моим мерам, для записи нужно принять 1,75 миллисекунды. Я измеряю скорость из приложения .net, которое записывает данные в db. Это приложение находится на том же компьютере, что и SQL Server.
Итак, вопрос в том, является ли эта скорость понятной для подхода, который я использую? Или это можно улучшить?
То, что я вижу в вашем примере вы выполняете прок для каждой записи, но вы получите более высокую производительность, если вы инвестируете в вашей инфраструктуре реорганизации. INSERT от SELECT будет работать быстрее, чем отдельные вставки –
Не могли бы вы рассказать? Вы имеете в виду пользовательский тип OrderBookEntry, который позволит передать набор параметров в качестве параметра? – athabaska