Rom*_*meo 3 c# sql-server optimization wcf
我需要在一个包含大约150,000行的表上搜索文本字段(varchar 500).
我尝试的第一个选项是直接在db服务器上执行存储过程,如下所示:
Select p.ProductID,
p.ProductDescription,
p.SalesPrice
From Products p
Where p.ProductDescription Like '%' + @PartialDescription + '%'
Run Code Online (Sandbox Code Playgroud)
结果很慢.即使使用ProductDescription索引,性能也不够快.
我想出的下一个解决方案是按照以下步骤进行的:
每当我需要进行搜索时,我会浏览该集合并进行下面的字符串比较
List<Product> searchResultItems = new List<Product>();
for (int i = 0; i < cachedProducts.Count; i++)
{
Product p = cachedProducts[i];
if (p.Description.IndexOf(partialDescription, StringComparison.OrdinalIgnoreCase)>=0)
{
searchResultItems.Add(p);
}
}
return searchResultItems;
Run Code Online (Sandbox Code Playgroud)此解决方案比直接搜索到数据库快一点.通过在内存中缓存表,它可以在很大程度上避免数据库调用.然而,它与传统系统(在10多年前在FileMaker上构建)的比较仍然很慢.我无法访问遗留系统的源代码,也不了解它.
使用MS SQL Server 2008数据库,使用System.Runtime.Caching上的ObjectCache编写的C#代码和缓存,我希望我的解决方案能够轻松胜过旧系统.令人尴尬的是,事实并非如此.如何优化我的搜索方法?我究竟做错了什么?上面的函数驻留在WCF服务中,并由Web应用程序使用(basicHttpBinding)而没有任何花哨的控件.我该怎么做才能让它更快?
直接搜索到数据库,它是一个更好的解决方案,任何类型的优化?我该如何优化它?