在已经投入生产的 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/