c# - 提高大型数据集中的搜索性能

标签 c# sql sql-server

在已经投入生产的 WPF 应用程序上,用户有一个窗口,他们可以在其中选择客户端。它显示了一个包含所有客户的列表和一个文本框,他们可以在其中搜索客户。

随着客户群的增加,这变得异常缓慢。每天大约发生 100 次的操作大约需要 1 分钟。

目前 MSSQL 管理工作室表示查询 select id, name, birth_date from client 执行需要 41 秒(大约 130000 行)。

这次有什么改进的建议吗?索引、ORM 或对代码的直接 sql 查询?

目前我正在使用框架 3.5 和 LinqToSql

最佳答案

如果您的查询实际上是 SELECT id, name, birth_date from client(即,没有 where 子句),那么在没有新硬件的情况下,您几乎无法加快查询速度. SQL Server 必须进行表扫描才能获取所有数据。即使是覆盖索引也意味着它必须扫描与表一样大的索引。

您需要问自己的是:130000 个客户的列表对您的用户真的有用吗?我真的有人要滚动到列表中的第 75613 个条目以找到他们想要的用户吗?答案可能不是。我只会选择搜索选项。至少您可以添加对这些查询有意义的索引。

如果您确实需要整个列表,请尝试分块延迟加载。从前 500 条记录开始,然后随着用户移动滚动条添加更多记录。这样可以减少初始加载时间,用户只会加载必要的数据。

关于c# - 提高大型数据集中的搜索性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499429/

相关文章:

c# - 具有异步顺序任务 C# 的 TaskScheduler

c# - 静态属性/ViewModel(C#、WinRT)

sql-server - MySQL CURTIME() 的 T-SQL 版本

sql - 我可以将一行一列的子查询视为标量吗?

sql - 获取具有 SQL Server 2008 列的 MAX 值的整个 ROW

c# - "ADD"从 XML 文件到 DataGridView

c# - WebClient 上传文件不起作用

SQL 排序/转换最后五个字符的问题

mysql存储过程更新查询

SQL 将重复行计数为单个