运行大型SQL语句并填充网格视图

本文关键字:填充 网格 视图 语句 大型 SQL 运行 | 更新日期: 2023-09-27 18:29:01

我有一个相当大的SQL语句,它有许多内部联接和交叉应用语句来执行一些计算,这些计算基于上一个查询为每个条目创建新列。

我想知道在代码中从C#运行这个查询来填充网格视图最有效/最好的方法是什么?

分解SQL并用C#编写一些计算?

创建存储过程?

仅仅将sql作为字符串传入并创建数据集,然后将数据集绑定到gridview似乎花费了太长时间。

运行大型SQL语句并填充网格视图

您的核心问题是数据库查询必须运行得更快。一旦有了解决方案,就可以相应地调整代码。

我首先要考虑的是优化数据库索引以提高查询性能。如果可以的话,可以使用SQL事件探查器和索引调整向导(我认为SQL Server Express版中没有这些工具)。请注意,新索引也可能导致插入时的性能下降,因此,如果您的数据库需要支持高事务量,则应小心使用这种方法。

如果您能找到一种方法,通过将查询分解为多个部分并用过程代码聚合结果来提高查询性能,那么转移到ObjectDataSource是有意义的。这将使您在获取数据的方式上具有最大的灵活性。

作为一个起点,我将在SQL编辑器中为您的查询和/或查询的一部分建立原型,以便您在决定如何更改ASP.NET代码之前,只关注查询优化。

如果不了解您的模式和正在使用的查询的细节,我无法进一步评论如何优化数据提取。但这应该会让你朝着正确的方向前进。

您的问题似乎是在每个SELECT上运行一些昂贵的计算。正确的解决方案是预先计算计算结果并将其存储在数据库中,这样您的网格就可以在不进行任何计算的情况下简单地读取数据。

当基础数据发生更改时,可以触发对结果的重新计算。您可以使用触发器,也可以调用从C#代码实现计算的存储过程。

您是否已经在代码中的任何其他地方执行任何SQL脚本(即,您是否已经决定如何访问数据)?我问这个问题的原因是,我最近使用ADO.net实体框架模型来弥合我的数据库和我想从数据库中的数据中使用的概念对象之间的差距,我强烈推荐它。也很容易掌握窍门。一旦实现了EF模型,只需使用EF模型生成的方法调用存储过程(是的,我建议您将查询保存在存储过程中),并提取到您的类中(这些类也是由模型自动创建的)。然后,您刚刚从过程中检索到的类列表显然可以绑定到您喜欢的任何控件。

http://msdn.microsoft.com/en-us/data/ff191186

这是值得知道的。

我想知道在代码中从C#运行这个查询来填充网格视图最有效/最好的方法是什么?

你的意思是从唯一一个可能的版本开始?

执行返回表的查询的唯一方法是运行返回DataReader的命令。指向如果给出了SQL,那就是它。没有其他选择。

注意:你可能想在这里扔的所有其他东西都在内部使用它。他们把它包起来。

分解SQL并用C#编写一些计算?

我最喜欢的食物是什么?你告诉我。这在很大程度上取决于硬件、数据量和查询。无法回答。

创建存储过程?

没有区别。

仅仅将sql作为字符串传入并创建数据集,然后将数据集绑定到gridview似乎花费了太长时间。

  • 什么太长了
  • 什么花这么长时间?加载一亿行?SQL Server处理?所有这些决定了优化。请提供相关信息-让我们知道时间花在哪里

也就是说:不使用数据集,而是在后台填充一个可观察的对象集合,至少可以在填充列表时显示结果。