Datatable.compute在类似条件下变慢

时间:2010-01-12 18:56:02

标签: c# asp.net datatable

我的asp.net程序有问题。我正在一个非常大的数据库上执行Datatable.Compute,其中包含like条件。结果需要4分钟才能显示或执行请求超时。如果我使用=和修复文本执行相同的请求,则需要将近1分钟才能显示,这对我来说是可以接受的。

以下是这么慢的行:

float test = (int)Datatbl.Tables["test"].Compute("COUNT(pn)", "pn like '9800%' and mois=" + i + " and annee=" + j);

我一直在寻找解决方案2天。

请帮帮我。

2 个答案:

答案 0 :(得分:1)

您是否从数据库中检索数据表中的数据?你有权访问数据库吗?

如果是这样,一个选项是研究将查找和聚合移动到数据库中的方法,而不是在C#代码中进行。一旦它在数据库中,如果需要,您可以为'mois'和'annee'列添加索引,这可能会大大加快查找速度。如果'9800'是硬编码值,那么你甚至可以添加一个由一个布尔列组成的非规范化,指示'pn'列是否以'9800'开头并在此列上放置一个索引。这可能会使查找速度非常快。

有很多选择。

答案 1 :(得分:1)

我找到了。

我使用Dataview并将结果发送到DataTable。这加快了10次这个过程

这是一个例子:

DataView dv = new DataView(Datatbl.Tables["test"], filter, "pn", DataViewRowState.CurrentRows);
DataTable test = dv.ToTable();

然后你可以使用“test”DataTable。