winforms Bindingsource filter slow c# winform

q35jwt9p  于 2023-08-07  发布在  C#
关注(0)|答案(2)|浏览(144)

当键入文本到文本框搜索它是缓慢的。这是我的代码

bsNhanSu.Filter = string.Format("Ma_nhan_vien like '%{0}%' or Ho_ten like '%{0}%' or Quoc_tich like '%{0}%' or convert(Nam_sinh,'System.String') like '%{0}%' or Ho_khau  like '%{0}%' or Ma_chuc_vu like '%{0}%'or Thong_tin_khac like '%{0}%' or Ma_cong_ty like '%{0}%' or Ten_cong_ty like '%{0}%' or Ten_chuc_vu  like '%{0}%' or Ten_nhom_chuc_vu like '%{0}%' or CCCD like '%{0}%'", TimkiemSrt);

字符串
如何让它更好地发挥作用

tuwxkamq

tuwxkamq1#

搜索功能的缓慢可能是由于在搜索字符串的开头使用了带有通配符(%)的LIKE子句。当在搜索模式的开始使用%通配符时,它会显著减慢搜索过程,特别是如果bsNhanSu数据集中有许多记录。
提高搜索性能的一种方法是避免使用前导通配符,而是使用尾随通配符。尾随通配符允许搜索有效地利用索引,使搜索更快。以下是如何修改代码:

bsNhanSu.Filter = string.Format("Ma_nhan_vien like '%{0}%' or Ho_ten like '%{0}%' or Quoc_tich like '%{0}%' or convert(Nam_sinh,'System.String') like '%{0}%' or Ho_khau like '%{0}%' or Ma_chuc_vu like '%{0}%' or Thong_tin_khac like '%{0}%' or Ma_cong_ty like '%{0}%' or Ten_cong_ty like '%{0}%' or Ten_chuc_vu like '%{0}%' or Ten_nhom_chuc_vu like '%{0}%' or CCCD like '%{0}'", TimkiemSrt);

字符串
通过从搜索模式中删除前导%,可以允许数据库引擎利用正在搜索的字段上的任何可用索引,从而提高搜索性能。
但是,请注意,如果要在字段的开头搜索部分匹配项,则性能改进可能有限。在这种情况下,您可以考虑实现更强大的全文搜索解决方案,或者使用专用搜索引擎以获得更好的性能,特别是在数据集很大的情况下。

qij5mzcb

qij5mzcb2#

如果要在具有20,000行的数据集中搜索与搜索关键字匹配的所有结果,则使用带前导通配符的LIKE子句可能不是最有效的方法。随着数据集变大,搜索性能可能会变慢,并且随着行数的增加,搜索性能可能无法很好地扩展。
要提高搜索性能并使其更好地工作,特别是对于较大的数据集,请考虑使用全文搜索解决方案或专用搜索引擎。全文搜索引擎旨在高效地处理大量文本数据并提供快速搜索功能。
以下是您可以考虑的一些选项:
1.全文索引:许多数据库支持全文索引,这可以显著提高基于文本的查询的搜索性能。您可以对数据集中的相关列创建全文索引,从而允许数据库执行优化搜索。请查阅数据库文档,了解它是否支持全文索引。
2.外部搜索引擎:考虑使用专门为文本搜索设计的外部搜索引擎,例如Elasticsearch或Apache Solr。这些搜索引擎具有高度可扩展性,并针对基于文本的搜索进行了优化。它们可以有效地处理大型数据集,并提供快速准确的搜索结果。
3.数据库优化:如果使用传统数据库,则可以优化数据库模式、查询结构和索引以提高搜索性能。但是,请记住,这种方法对于复杂的基于文本的搜索可能有限制。
4.分页:考虑实现分页,而不是一次显示所有匹配结果。这样,您可以在每个页面上检索有限数量的结果,从而使搜索更快,响应更快。
实现全文搜索解决方案或使用专门的搜索引擎将为您的搜索功能提供更好的性能和可扩展性,特别是在处理较大的数据集时。

相关问题