我有一个关于Linq to SQL查询的问题 - 性能方面。 我的目标是找出我的大约500个项目(在List中)的元素是否与数据库条目匹配。目前,仅这个操作就需要大约300秒才能完成!数据库包含超过一百万行数据,并且未来还将增长,因此这样早期的性能表现是不可接受的。以下是示例:
var query = from item in db.DataTable.Where(x => x.date == suppliedDate)
where inputList.Contains(item.name)
select new { item.name};
帮帮我!
编辑: 非常感谢您的所有建议!我只想补充一些额外的观察,因为我现在已经能够查看LINQ查询的SQL输出(如下所示)。
SELECT [t0].[name]
FROM [dw].[DataTable] AS [t0]
WHERE ([t0].[name] IN (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15, @p16, @p17)) AND ([t0].[date] = @p18)
-- @p0: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [Mark]
-- @p1: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [Owen]
-- @p2: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [James]
-- @p3: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [John]
这是否会在数据库上产生500个单独的访问?(如Ian所建议的那样)并且有没有办法在不使用存储过程或创建额外表的情况下提高性能? (这两个选项现在都不是很可用)。我尝试了Geoff的建议,这将我的运行时间从300秒降至约126秒 - 但这仍然很多,特别是考虑到数据库连接最多只需要不到10秒。
非常感谢