我正在使用实体框架,我对性能有疑问。
这是我的linq添加方法:
CarTable newCar = new CarTable()
{
CarPlate = plate,
CarModel = model,
CarColor = color,
CarImage = image
};
entity.CarTable.Add(newCar);
entity.SaveChanges();
这是一个用于相同目的的存储过程:
CREATE PROC prCreateCar
(@plate NVARCHAR(20),
@model NVARCHAR(50),
@color NVARCHAR(10),
@image NVARCHAR(MAX))
AS
BEGIN
INSERT INTO CarTable
VALUES (@plate, @model, @color, @image)
END
用asp.net调用它:
entity.prCreateCar('34 F5 3498','Renault Clio','Blue','Images/Cars/clio.png');
他们两个都工作正常,但这是我的问题..哪一个提供更好的表现?我听说存储过程更快但是这是真的吗?如果是真的,它在SELECT,DELETE,UPDATE和INSERT等所有条件下都会更快吗?
答案 0 :(得分:0)
对于这样简单的查询,可能会有很大的不同。如果你有更复杂的查询(连接许多不同的表/子查询/等)只是使用不同的参数,存储过程的性能通常会更好,因为数据库只需要创建一次执行计划然后可以缓存它,同时它将为每个常规SQL查询重新创建。
如果你必须连续进行大量插入,例如从外部源(目录数据或类似的东西)导入数据时,您可能希望使用BULK INSERT语句。还有EF的扩展允许以类似于常规EF操作的方式使用该功能 - 尽管我没有实际经验。一个例子是EntityFramework.BulkInsert