sách gpt4 ai đã đi

c# - LINQ to SQL 比较性能

In lại 作者:行者123 更新时间:2023-11-30 14:03:26 28 4
mua khóa gpt4 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 秒。

非常感谢

1 Câu trả lời

-- @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您对 linq 的期望。

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

我已经发布了完成此操作的代码,đây

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

28 4 0
Bài viết được đề xuất: Lý do nên/không nên sử dụng lớp một phần để thử nghiệm?
Bài viết được đề xuất: c# - 翻转滚动条 WPF
Bài viết được đề xuất: c# - 将方法指针从 C# 传递到 Delphi DLL
Bài viết được đề xuất: c# - 如何在 C# WPF 中监听 Canvas 上的鼠标左键单击?
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com