gpt4 book ai didi

c# - LINQ to SQL 比较性能

转载 作者:行者123 更新时间:2023-11-30 14:03:26 26 4
gpt4 key购买 nike

我对 linq to sql 查询有问题 - 性能方面。我想做的是找出我的大约 500 个项目(在列表中)的集合中的元素是否与数据库条目匹配。目前,仅此一项操作就需要大约 300 秒才能完成!该数据库包含超过一百万行,并且在未来肯定会增长,所以这么早的这种性能水平是 Not Acceptable 。示例如下:

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 次单独点击吗? (正如伊恩所建议的)?有什么方法可以提高性能而不必求助于存储过程或创建额外的表? (这两个选项现在对我来说都不可用)。我已经尝试了 Geoff 的建议,这使我的运行时间从 300 秒减少到大约 126 秒 - 但这仍然很多,尤其是考虑到数据库连接最多只需要不到 10 秒。

非常感谢

最佳答案

-- @p0: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [Mark] 

列是varchar吗?

如果您检查该查询的执行计划,您可能会看到 sql server 将整个索引转换为 nvarchar(DOOOOOOM!)

修复方法是将参数转换为 varchar。


您可以获取命令并直接重置其上的参数类型(在您的情况下为 ansi-string)。

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.getcommand.aspx http://msdn.microsoft.com/en-us/library/system.data.dbtype.aspx

然后您可以对该命令调用 ExecuteReader,生成 DbDataReader。您可以将此 DbDataReader 交给数据上下文的 Translate 方法,它会给您 IEnumerable<T>您对 linq 的期望。

http://msdn.microsoft.com/en-us/library/bb534213.aspx

我已经发布了完成此操作的代码,here

关于c# - LINQ to SQL 比较性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com