Я тестирую скорость вставки нескольких строк с помощью одного оператора INSERT.Несколько строк с одним INSERT в SQLServer 2008
Например: INSERT INTO [MyTable] VALUES (5, 'собака'), (6, 'кошка'), (3, «рыбы)
Это очень быстро, пока я не пройди 50 строк на одно утверждение, то скорость значительно падает.
Вставка 10000 рядов с партиями из 50 единиц занимает 0,9 секунды. Вставка 10000 строк с партиями из 51 занимает 5,7 секунды.
Мой вопрос состоит из двух частей:
- Почему такой жесткий падение производительности на 50?
- Могу ли я полагаться на это поведение и кодировать свое приложение, чтобы никогда не отправлять партии более 50?
Мои тесты были выполнены в C++ и ADO.
Редактировать: Похоже, что выпадающая точка не 50 строк, а 1000 столбцов. Я получаю аналогичные результаты с 50 строками из 20 столбцов или 100 строк из 10 столбцов.
У меня такое ощущение, что он ухудшается из-за разбора ввода. – Andrey
Полная и полная дикая догадка: менее 50 строк кэшируются в ОЗУ с помощью SQL Server, но большие вставки считаются более «важными» и немедленно выписываются на диск. Честно говоря, не уверен (поэтому комментарий, а не ответ) –