Мне нужно взять некоторые данные из одной таблицы (и развернуть некоторые XML на этом пути) и поместить ее в другую таблицу. Поскольку в исходной таблице могут быть тысячи или записи, которые вызвали тайм-аут, я решил сделать это в партиях по 100 записей. Код запускается по расписанию, поэтому его выполнение в пакетах работает нормально для клиента. Если я скажу 200 записей в исходной базе данных, sproc работает очень быстро, но если есть тысячи, это занимает несколько минут. Я предполагаю, что «ТОП-100» занимает только 100 лучших после того, как он прошел через все записи. Мне нужно изменить весь код и sproc в какой-то момент, поскольку он не масштабируется, но на данный момент есть быстрое исправление, чтобы сделать этот запуск быстрее?медленная команда SQL
INSERT INTO [deviceManager].[TransactionLogStores]
SELECT TOP 100 [EventId],
[message].value('(/interface/mac)[1]', 'nvarchar(100)') AS mac,
[message].value('(/interface/device) [1]', 'nvarchar(100)') AS device_type,
[message].value('(/interface/id) [1]', 'nvarchar(100)') AS device_id,
[message].value('substring(string((/interface/id)[1]), 1, 6)', 'nvarchar(100)') AS store_id,
[message].value('(/interface/terminal/unit)[1]', 'nvarchar(100)') AS unit,
[message].value('(/interface/terminal/trans/event)[1]', 'nvarchar(100)') AS event_id,
[message].value('(/interface/terminal/trans/data)[1]', 'nvarchar(100)') AS event_data,
[message].value('substring(string((/interface/terminal/trans/data)[1]), 9, 11)', 'nvarchar(100)') AS badge,
[message].value('(/interface/terminal/trans/time)[1]', 'nvarchar(100)') AS terminal_time,
MessageRecievedAt_UTC AS db_time
FROM [deviceManager].[TransactionLog]
WHERE EventId > @EventId
--WHERE MessageRecievedAt_UTC > @StartTime AND MessageRecievedAt_UTC < @EndTime
ORDER BY terminal_time DESC
Включен ли индекс EventId в таблицу транзакций? – zsong