Comments 7
Оказывается, использование MERGE для вставки четырех строк значительно быстрее чем 4 отдельных оператора INSERT – даже в пакетном режиме
Это как то противоречит документации MS SQL:
Performance Tip: The conditional behavior described for the MERGE statement works best when the two tables have a complex mixture of matching characteristics. For example, inserting a row if it doesn't exist, or updating a row if it matches. When simply updating one table based on the rows of another table, improve the performance and scalability with basic INSERT, UPDATE, and DELETE statements
https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-ver16
Разве?
Performance Tip: The conditional behavior described for the MERGE statement works best when the two tables have a complex mixture of matching characteristics. For example, inserting a row if it doesn't exist, or updating a row if it matches.
complex mixture of matching characteristics
То есть когда есть и совпадения и новые сроки
Оптимизацией сетевого трафика занялись в EF7, а MERGE использовали уже в EF6.
И кстати, в обсуждениях поста был вопрос - почему не использовали INSERT для нескольких записей, типа: "INSERT MyTable VALUES (row1c1, row1c2), (row2c1, row2c2) "
Ответ Shay Rojansky таков: "Да, такой INSERT эффективнее, однако он не гарантирует порядок возврата значений сформированных в БД идентификаторов и теряется возможность сопоставить их с переданными на добавление строками.
Постояно упоминается SQLSERVER (в том числе только его настройки), статья справедлива для SQL SERVER или для любой совместимой базы, например постгри?
Это был первый вопрос к посту. Ответ автора:
The 2nd optimization (bulk update) is indeed only for SQL Server, but the other two (the roundtrip reduction) do apply for other providers
т.е., оптимизация массового обновления реализована только в модуле Microsoft.EntityFrameworkCore.SqlServer. Оптимизации, связанные с отказом от явных транзакций, применимы и для других SQL провайдеров. А вот выполнены они реально или нет - автор не уточняет.
Представляем Entity Framework Core 7 Preview 6: Улучшение производительности