C# SQL 查询滞后

Posted

技术标签:

【中文标题】C# SQL 查询滞后【英文标题】:C# SQL query is lagging 【发布时间】:2016-05-23 08:40:24 【问题描述】:

我开发了一个应用程序来处理数据库中的数据。当我从我的 PC 或我附近的 PC(在我的公司,同一台服务器)上运行该应用程序时,它工作正常,但是当来自同一公司但另一台服务器(另一个国家/地区)的人试图做同样的事情时,他有巨大的 LAG .

我知道查询有点“太多”:

SqlCommand command = new SqlCommand("SELECT * FROM dbo.Person", con)

更多数据 -> 更多滞后

但我有点需要数据库中的所有数据来填充 ListView,然后导出到 Excel 文档。

我尝试过的事情:

我创建了一个将执行此命令的后台工作人员,当工作人员完成时,我使用如下数据填充 ListView:

private void ViewAllWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)    
   
    while (Oreader.Read())
    

        ListViewItem item = new ListViewItem(Oreader["ID"].ToString());

        item.SubItems.Add(Oreader["DecadeOfBirth"].ToString());
        // etc
    

在这种情况下你会怎么做?什么可以帮助减少延迟?什么是正确的方法?

【问题讨论】:

填充 ListView 与导出到 Excel 之间有很大的不同。什么是真正的? 在获取记录时尝试在 do while 循环中从 PersonTable 获取前 (1000) 个项目,否则您的连接将超时 真的需要表中的每条记录,还是在做一些下游逻辑来减少输出? 测试一下查询的执行速度如何? 或者在服务器端创建一个服务,该服务将创建并返回压缩的 Excel 文件 【参考方案1】:

解决此问题的唯一正确方法是减少返回给用户的数据量。

让我举个例子:

您的表包含许多需要导出的行 用户想要预览数据,然后将其导出到 Excel 允许用户查看部分数据 前 N 条记录 过滤器(按用户名、部门、​​日期等) 分页(跳过、取走) 用户对所看到的内容感到满意,然后想要导出所有数据 你在服务器上运行它,然后给用户一些进度反馈

【讨论】:

【参考方案2】:

如果您的应用程序基于 IIS(如 ASP.NET),您可以使用 Application Object 并在应用程序运行时保存表“Person”中的所有数据开始了。

【讨论】:

那就更简单了。尝试在主类(Program.cs 默认)中创建静态属性,例如 private static ClassWithData __instance = null; public static ClassWithData INSTANCE get if (__instance == null) __instance = new ClassWithData(); return __instance; 并在 ClassWithData 中定义构造函数,您可以在其中加载某些属性中的所有数据。然后你可以在程序的任何地方使用这个数据Program.INSTANCE.PersonData 这不是完美的决定,但可以提供一些想法。

以上是关于C# SQL 查询滞后的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询随机滞后

C# Access 模糊查询SQL语句

BigQuery 无法查询滞后的大表

C# WPF SQL 多条件查询

生成使用 c# 代码执行的查询的 sql 脚本

C# 中查询的 SQL 注入问题