C# 在大表格上搜索文本最有效的方法是什么?
我需要在一个大约有150000行的表上搜索一个文本字段(varchar 500) 我尝试的第一个选项是直接在db服务器上执行一个存储过程,如下所示:C# 在大表格上搜索文本最有效的方法是什么?,c#,sql-server,wcf,optimization,C#,Sql Server,Wcf,Optimization,我需要在一个大约有150000行的表上搜索一个文本字段(varchar 500) 我尝试的第一个选项是直接在db服务器上执行一个存储过程,如下所示: Select p.ProductID, p.ProductDescription, p.SalesPrice From Products p Where p.ProductDescription Like '%' + @PartialDescription + '%' 结果相当缓慢。即使使用ProductDescripti
Select p.ProductID,
p.ProductDescription,
p.SalesPrice
From Products p
Where p.ProductDescription Like '%' + @PartialDescription + '%'
结果相当缓慢。即使使用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;
List searchResultItems=new List();
for(int i=0;i=0)
{
searchResultItems.Add(p);
}
}
返回searchResultItems;
直接搜索数据库,这是一个更好的解决方案吗?如何优化它?如果您使用的是MS SQL 2008,我建议您使用全文搜索。在您的表上启用FT索引,然后按照FTS提示搜索文本。因为您正在搜索带有通配符前缀的值,索引将无法使用,因此它将始终执行表扫描 你可以调查一下 即使使用ProductDescription上的索引,性能也不够快 初学者SQL: “%”+@部分描述+'%” Triggersa全表扫描,由于起始“%”而无法使用索引。标准索引用于搜索单个单词 如果你能处理掉这个问题,那么基本上你就可以使用索引,并且应该可以立即得到回报 在一张大约有150000行的桌子上 玩具大小。除非您在2gb vps上运行
我会删除%或转到全文索引。那么在db级别(使用FTS)搜索是最好的吗?在应用层这样做毫无意义?(对@Alok也是同样的问题)有什么见解吗?嗯,除非你处理的是少量的行,否则我会在db级别处理。将所有行放回应用程序层并在应用程序层中执行这项操作对于大量数据来说并不是一件好事。一个有150000行的表对您来说是一个“玩具”是吗?先生,你是一个非常聪明的人+感谢你令人鼓舞的评论。我现在要回到我的桌子上玩玩具。谢谢,是的。我生活在这样一个世界里,每天你要将4000万行数据加载到表中。我们在7分钟内处理了450.000个业务对象,其中一些具有接近25万行的详细信息。10年前只有15万人。20年前,foxpro处理100万条记录的行没有问题。现实一点——如今,小型终端上的工作站内存为16gb,数据库服务器内存为250gb。