插入一行列表的批量插入效率
Bulk insert efficiency for inserting a list with one row
我正在尝试使用批量插入并将其替换为我项目中的当前通用插入。一些插入请求(BillType.Booklet)是一个单行列表,其他是一个多行列表。
public async Task CreateBill(List<BillReceiverDto> Receivers, BillType BillType)
{
var bulkList =new List<BillReceiverDto>();
if (BillType == BillType.Booklet)
{
bulkList.Add(Receivers.FirstOrDefault());
}
else
{
bulkList.AddRange(Receivers);
}
await _dbContextProvider.GetDbContext().BulkInsertAsync(bulkList);
}
Bulk insert对于插入大数据,特别是100条以上的数据有很好的性能。它在75毫秒内插入5000个实体。但是使用批量插入一行列表是否有效?有没有开销之类的缺点...?
我相信 BulkInsertAsync 扩展在后台使用了 SqlBulkCopy。在这种情况下,不久前我在博客上发布了一些基准测试,可能会有用。
虽然我没有专注于单行插入,但与 Table 值参数方法相比,将 SqlBulkCopy 用于较少行数 (100) 时似乎确实有成本。随着卷的增加,SqlBulkCopy 会降低性能,但对于低卷会有明显的开销。多少开销?在宏伟的计划中,您可能不会注意到 10 毫秒。
如果您要处理多达数百行,我实际上建议使用 Table 值参数方法来提高性能。更大的卷 - SqlBulkCopy。
根据您的 needs/views 此处的开销,我很想检查您必须插入多少行并使用最适合该卷的机制。就个人而言,如果这是一个非常典型的场景,我不会将 SqlBulkCopy 用于较少的行,因为开销。
免责声明:我是Entity Framework Extensions
的所有者
这取决于您使用的图书馆 Aref Hemati,
在我们的库中,如果要插入的实体不超过 10 个,我们直接使用 SQL 语句。所以 SqlBulkCopy
开销没有被使用。
因此即使只有一行也可以使用我们的库,但显然针对成百上千行进行了优化。
我正在尝试使用批量插入并将其替换为我项目中的当前通用插入。一些插入请求(BillType.Booklet)是一个单行列表,其他是一个多行列表。
public async Task CreateBill(List<BillReceiverDto> Receivers, BillType BillType)
{
var bulkList =new List<BillReceiverDto>();
if (BillType == BillType.Booklet)
{
bulkList.Add(Receivers.FirstOrDefault());
}
else
{
bulkList.AddRange(Receivers);
}
await _dbContextProvider.GetDbContext().BulkInsertAsync(bulkList);
}
Bulk insert对于插入大数据,特别是100条以上的数据有很好的性能。它在75毫秒内插入5000个实体。但是使用批量插入一行列表是否有效?有没有开销之类的缺点...?
我相信 BulkInsertAsync 扩展在后台使用了 SqlBulkCopy。在这种情况下,不久前我在博客上发布了一些基准测试,可能会有用。
虽然我没有专注于单行插入,但与 Table 值参数方法相比,将 SqlBulkCopy 用于较少行数 (100) 时似乎确实有成本。随着卷的增加,SqlBulkCopy 会降低性能,但对于低卷会有明显的开销。多少开销?在宏伟的计划中,您可能不会注意到 10 毫秒。
如果您要处理多达数百行,我实际上建议使用 Table 值参数方法来提高性能。更大的卷 - SqlBulkCopy。
根据您的 needs/views 此处的开销,我很想检查您必须插入多少行并使用最适合该卷的机制。就个人而言,如果这是一个非常典型的场景,我不会将 SqlBulkCopy 用于较少的行,因为开销。
免责声明:我是Entity Framework Extensions
的所有者这取决于您使用的图书馆 Aref Hemati,
在我们的库中,如果要插入的实体不超过 10 个,我们直接使用 SQL 语句。所以 SqlBulkCopy
开销没有被使用。
因此即使只有一行也可以使用我们的库,但显然针对成百上千行进行了优化。